pthread_cond_wait()
再使用此function時,要特別注意,signal 的timing,不然很容易等不到訊號,必須配合mutex
假設有 call function "command" 與 thread A process command 這種狀況。
command()
{
enqueue_command();
signal
}
thread_A()
{
while(1)
{
waiting_signal
while(dequeue());
}
}
如果沒有mutex 輔助的話,可能會發生還沒有waiting 時,signal 不斷的近來,這樣就算queue了之前的command 也無用,因為要等下一次 正確時間的 先waiting 後 signal 的狀況才能夠一次把這些dequeue乾淨,邏輯是不對的
其實用select 的方式作 sleep 就可以解決這樣的問題,反正指令都已經queue起來了,所以有時後在這種狀況,使用waiting condition 配合mutex 是有點多此一舉。
沒有留言:
張貼留言