General purpose operating systems (OS) are concurrent and multithread, and the primary goal of thread scheduler is to enforce fairness among all threads. This design is unsuitable for Real-Time (RT) systems, because tasks have soft or hard deadline of finishing time. Concurrency breaks timing of RT applications because users never know when their program is actually running. Explicitly allocation of processor resource to programs (threads) is thus necessary for timing-aware applications.
It's common in controller design to assume that the controller reads the sensors and writes to the actuators at the same time instant. This assumption is often violated in practice because the controller executes its code sequentially on a microprocessor. If the microprocessor is "fast enough," often the controller will still work.