A processing system comprising: a plurality of parallel execution units (102_0... 102_K-1) each operable to execute a respective series of threads, wherein at least some of the threads executed by at least some of the execution units are non-critical threads not being designated as critical; request buffering storage operable to receive a request indicating that one of the threads in the respective series executed by a first one of the execution units is designated as a critical thread; safety thread scheduling circuitry arranged to read the request from the request buffering storage, and in response to schedule a check thread, being a duplicate of the critical thread, to be executed on a second one of the plurality of execution units other than the first execution unit; result buffering storage arranged to buffer one of: a first result being a result of the execution of the critical thread on the first execution unit, and a second result being a result of the execution of the check thread on the second execution unit; and comparison circuitry arranged to compare said one of the first and second results from the result buffering storage with the other of the first and second results, and to raise error signal if the first and second results do not match according to said comparison; characterized in that the request includes an indication of a safety time-window; and wherein the safety thread scheduling circuitry is configured to detect when at least one of the execution units is idle, and if none of the execution units is detected to be idle by the expiry of the safety time-window, to interrupt one of the non-critical threads executing on a non-idle one of the execution units and select the non-idle execution unit as the second execution unit to execute the check thread in place of the interrupted thread. a plurality of parallel execution units (102_0... 102_K-1) each operable to execute a respective series of threads, wherein at least some of the threads executed by at least some of the execution units are non-critical threads not being designated as critical; request buffering storage operable to receive a request indicating that one of the threads in the respective series executed by a first one of the execution units is designated as a critical thread; safety thread scheduling circuitry arranged to read the request from the request buffering storage, and in response to schedule a check thread, being a duplicate of the critical thread, to be executed on a second one of the plurality of execution units other than the first execution unit; result buffering storage arranged to buffer one of: a first result being a result of the execution of the critical thread on the first execution unit, and a second result being a result of the execution of the check thread on the second execution unit; and comparison circuitry arranged to compare said one of the first and second results from the result buffering storage with the other of the first and second results, and to raise error signal if the first and second results do not match according to said comparison; characterized in that the request includes an indication of a safety time-window; and wherein the safety thread scheduling circuitry is configured to detect when at least one of the execution units is idle, and if none of the execution units is detected to be idle by the expiry of the safety time-window, to interrupt one of the non-critical threads executing on a non-idle one of the execution units and select the non-idle execution unit as the second execution unit to execute the check thread in place of the interrupted thread.