37 關於條件變數(condition variable)的基本特性,下列敘述何者錯誤?
(A) 條件變數可以單獨使用不需互斥鎖
(B) 條件變數有等候(wait)與送出信號(signal)兩個動作
(C) 條件變數用於解決程序間相互依賴的問題
(D) 條件變數需要等待事件發生後才能往下執行

答案:登入後查看
統計: A(3), B(1), C(1), D(0), E(0) #3399884

詳解 (共 2 筆)

#7318887

【第一步:找關鍵字】

關鍵字:

  • 條件變數(condition variable)

  • 互斥鎖(mutex)

  • wait / signal

  • 單獨使用(陷阱關鍵字)

? 最大陷阱:
condition variable 一定要搭配 mutex

【第二步:白話翻譯】

這題在問:

? 「條件變數這個同步工具,有哪些說法是錯的?」

【第三步:解題思路】

這題在考什麼觀念?

? Condition Variable 的使用規則(一定搭配 mutex)

解題步驟

  1. 回想 condition variable 的用途

  2. 想它是不是能單獨使用

  3. 找錯誤敘述

原理與規則(生活比喻)

把 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(條件)

基本流程(超重要)

ㅤㅤ
pthread_mutex_lock(&mutex);

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」

0
0
#6786486
1. 題目解析 本題詢問有關條件變數的基...
(共 891 字,隱藏中)
前往觀看
0
0