Preemptive Scheduling

Introduction

nonpreemptive scheduling 相比,採用 preemptive scheduling 的 OS 可以強制將 CPU 從 process 那裡搶回來

現代的 OS 都是用 preemptive scheduling

Race Condition

Preemptive 讓 context switch 可以發生在任何時間點,因此很可能發生 race condition

For example,

Process A 正在更新共享資料(寫到一半)
        │
        ▼
OS 把 A 搶走,換 Process B 跑
        │
        ▼
Process B 去讀同一筆資料
        │
        ▼
資料處於 inconsistent state(A 還沒寫完)
        │
        ▼
B 讀到的是錯誤的資料 ← Race Condition!