2010-11-20 100 views
3

是否有可能在boost :: condition_variable上「等待」而不必首先獲取互斥鎖?否則,這可以直接用pthread lib來完成嗎?boost :: condition_variable無鎖等待

爲了簡單起見,我想避免直接進入操作系統層(例如linux上的futex)。但我也不希望互斥量調用的開銷。

我很清楚在正常情況下這樣做的競爭條件。我用另一種方式覆蓋了它。

+0

如果你看一下boost :: condition_variable的使用模式,它並不是真的有意義沒有互斥使用。一旦進入,等待方法會自動解鎖互斥鎖,並將該線程添加到等待隊列中,然後在返回時鎖定互斥鎖:) – 2010-11-20 11:34:41

回答

6

在這兩種情況下都必須首先獲取互斥量。

boost.threads文檔:

無效 等待(升壓:: unique_lock & 鎖)

前提條件:鎖由 當前線程鎖上[...]

pthread_cond_wait手錶頁數:

的調用pthread_cond_wait()和 那麼pthread_cond_timedwait()函數 用來在條件變量阻塞。 它們被調用鎖定的互斥鎖 調用線程或未定義的 行爲將導致

我不知道有任何其他選擇。

+0

好的,所以絕對不要使用此係統。我將不得不尋找其他的東西。 – 2010-11-20 14:03:49

0

不,它不是。正如您從condition_variable API規範中可以看到的那樣,它始終需要提供可鎖定的unique_lock。但我並不真正瞭解問題所在。這個構造實現了一個「監視器」,如果沒有某種同步化對象,就不能完成...