Re: [問題] pthread_cond_wait 為什麼會有 mutex ꨠ…
※ 引述《littleboypis (littleboypis)》之銘言:
: 想請教一下各位一個函數
: int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
: 為何 pthread_cond_wait 這個函數的參數需要傳入一個 mutex 呢
: 雖然看了他的解說但還不是很明瞭 為何
: 而且 另一個 int pthread_cond_signal(pthread_cond_t *cond); 也不需要 mutex
: 為何 pthread_cond_wait 要傳入一個 mutex呢
: 謝謝
: 另外在 C 底下要怎麼達到多型 或者 Hooking呢
: 因為我想在程式呼叫 pthread_create 前做一些事情
: 謝謝
以我所知, 分別在於 race condition
用 signal 很容易出現 race condition.
比如
Thread A:
send a job
wait for signal
然後
Thread B:
process incoming job
signaling
看上來很正常, 是吧?
但萬一發生的時序是:
Thread A Thread B
send job
process incoming job
signaling
wait for signal
這種情況下, A 就會很傻很天真的一直等下去了
condition 的做法就是加 mutex, 令到 wait for signal
之後才暫時 release mutex, 而這時候 thread B 才能
取得 mutex 做 signalling
Thread A Thread B
mutex acquire
send job
process inocming job
企圖 acquire mutex
wait + release mutex
mutex acquired
signal
wake up+企圖acquire mutex
mutex release
mutex acquired
這樣就避免了前面說的 race condition 了
Alien
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
※ 編輯: adrianshum 來自: 202.155.236.82 (03/31 19:26)
※ 編輯: adrianshum 來自: 202.155.236.82 (03/31 19:28)
推
04/02 03:12, , 1F
04/02 03:12, 1F
→
04/02 15:57, , 2F
04/02 15:57, 2F
→
04/02 22:16, , 3F
04/02 22:16, 3F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章