作者adrianshum (Alien)
看板C_and_CPP
標題Re: [問題] pthread_cond_wait 為什麼會有 mutex ꨠ…
時間Tue Mar 31 19:04:22 2009
※ 引述《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)
推 LPH66:推一個 之前對這東西的自行理解果然只有半吊子... 04/02 03:12
→ adrianshum:其實我也是自行理解的 XDD 萬一有錯希望大家指正嘍 04/02 15:57
→ sunneo:檢驗multiprocess的deadlock發生有點像是要舉所有subset 04/02 22:16