2013年1月6日 星期日

pthread condition waiting mutex

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 是有點多此一舉。

沒有留言:

張貼留言