2010-02-23 52 views
0

我想有以下阻塞條件變量有沒有下面的C++阻塞條件變量

  1. 一旦阻塞條件變量已經發出信號,所有的線程不會等待特定的條件變量
  2. 的條件變量可以隨時無信號。
  3. 一旦條件變量已經unsignaled,所有的線程將在可變

我看http://www.boost.org/doc/libs/1_34_0/doc/html/boost/condition.html

然而等待,這是行不通的(1)

好像有有沒有線程條件變量的等待中,notify_one/notify_all叫,會使信號丟失

1) thread TA try wait on condition variable C 
2) thread TB call `notify_all` 
3) thread TA will continue execution 

1) thread TB call `notify_all` 
2) thread TA wait on condition variable C 
3) thread TA will still continue waiting <-- How can I have condition variable C remains in 
               signaled state, and make no wait for thread TA 
+1

你有沒有工作的問題的代碼? – Xorlev 2010-02-23 05:11:13

回答

0

解決的辦法是有一個手動重置事件如下:

CreateEvent(0, TRUE, TRUE, 0); 

一旦它已通過SetEvent的信號,它總是會在信號狀態。

+0

如果您在Windows中工作。 – tony 2010-02-26 05:23:01

1

您的條件變量必須與必須檢查的布爾值(等待)組合在一起。請等待虛假並通知所有人。所以任何不等待的線程都應該檢查等待變量並且會繼續。
當然,線程只會在到達條件變量代碼時再等待。