37 關於條件變數(condition variable)的基本特性,下列敘述何者錯誤?
(A) 條件變數可以單獨使用不需互斥鎖
(B) 條件變數有等候(wait)與送出信號(signal)兩個動作
(C) 條件變數用於解決程序間相互依賴的問題
(D) 條件變數需要等待事件發生後才能往下執行
統計: A(3), B(1), C(1), D(0), E(0) #3399884
詳解 (共 2 筆)
【第一步:找關鍵字】
關鍵字:
-
條件變數(condition variable)
-
互斥鎖(mutex)
-
wait / signal
-
單獨使用(陷阱關鍵字)
? 最大陷阱:
condition variable 一定要搭配 mutex
【第二步:白話翻譯】
這題在問:
? 「條件變數這個同步工具,有哪些說法是錯的?」
【第三步:解題思路】
這題在考什麼觀念?
? Condition Variable 的使用規則(一定搭配 mutex)
解題步驟
-
回想 condition variable 的用途
-
想它是不是能單獨使用
-
找錯誤敘述
原理與規則(生活比喻)
把 condition variable 想成「等通知」:
-
你(執行緒)在等某件事發生
-
等到有人通知你(signal)才繼續
? 但關鍵是:
? 你在等的時候,要「鎖住資源」
就像:
-
你排隊等叫號(wait)
-
同時櫃台(mutex)要控管秩序
? 所以:
condition variable 一定要配 mutex
【第四步:選項分析】
(A) 為什麼錯?
✘ 錯誤(本題答案)
? condition variable 不能單獨使用
? 一定要搭配:
-
mutex(互斥鎖)
否則會有:
-
race condition
-
資料不一致
(B) 為什麼對?
✔ 正確
? condition variable 的核心操作:
-
wait(等待)
-
signal(通知)
(C) 為什麼對?
✔ 正確
? 用來解決:
程序(或執行緒)之間的依賴問題
例如:
-
producer 等 buffer 空位
-
consumer 等資料
(D) 為什麼對?
✔ 正確
? condition variable 的本質:
等某個條件成立才繼續執行
【觀念補充與延伸】
核心觀念定位
? 作業系統 / 同步機制(Synchronization)
? 高頻考點
Condition Variable 結構
通常搭配:
-
mutex(鎖)
-
condition variable(條件)
基本流程(超重要)
while (條件不成立) {
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
? 注意:
-
wait 會「自動釋放 mutex」
-
被喚醒後會重新取得 mutex
觸類旁通(舉一反三)
對比概念
-
semaphore vs condition variable
? semaphore 管數量
? condition variable 管條件
變化題型
-
問:為什麼要用 while 而不是 if?
? 防止 spurious wakeup(假喚醒)
【記憶口訣】
? 「條件變數不單飛,一定配鎖」
【常見陷阱】
學生最容易搞混的地方
以為 condition variable 可以單獨使用
心理盲點
只記得 wait / signal,忽略 mutex
避坑指南
? 記一句:
「沒有 mutex,就沒有 condition variable」