作者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)
1F:推 LPH66:推一个 之前对这东西的自行理解果然只有半吊子... 04/02 03:12
2F:→ adrianshum:其实我也是自行理解的 XDD 万一有错希望大家指正喽 04/02 15:57
3F:→ sunneo:检验multiprocess的deadlock发生有点像是要举所有subset 04/02 22:16