作業系統›Ch6 行程同步(Process Synchronization)第 3 題/共 32 題
3. Race Condition、Multithreading
#OS-06-003易Race ConditionMultithreading
請寫一段multithread虛擬碼程式,說明什麼是race condition。
參考答案與解析
int counter = 0;
void thread_A() {
counter = counter + 1; // 讀取counter、加1、寫回,這三個步驟不是原子操作
}
void thread_B() {
counter = counter + 1;
}
race condition範例:假設counter初始為0。thread_A讀取counter得到0,接著被排程器切換出去(尚未寫回);此時thread_B執行,讀取counter也得到0,計算後寫回1;接著排程器切回thread_A,thread_A用它自己先前讀到的舊值0計算出1,寫回counter=1。最終counter=1,但正確的結果(兩個thread各自遞增一次)應該是2。這種『最終結果取決於兩個thread確切的交錯時序』的現象,就是race condition,根本原因是「讀取-計算-寫回」不是原子操作,兩個thread可能同時讀到還沒被對方更新的舊值。
📄 台大112
▤完整推導請見《WH 資工筆記 · 作業系統》Ch6 行程同步(Process Synchronization)