是否有可能在boost :: condition_variable上「等待」而不必首先獲取互斥鎖?否則,這可以直接用pthread lib來完成嗎?boost :: condition_variable無鎖等待
爲了簡單起見,我想避免直接進入操作系統層(例如linux上的futex)。但我也不希望互斥量調用的開銷。
我很清楚在正常情況下這樣做的競爭條件。我用另一種方式覆蓋了它。
是否有可能在boost :: condition_variable上「等待」而不必首先獲取互斥鎖?否則,這可以直接用pthread lib來完成嗎?boost :: condition_variable無鎖等待
爲了簡單起見,我想避免直接進入操作系統層(例如linux上的futex)。但我也不希望互斥量調用的開銷。
我很清楚在正常情況下這樣做的競爭條件。我用另一種方式覆蓋了它。
在這兩種情況下都必須首先獲取互斥量。
從boost.threads文檔:
無效 等待(升壓:: unique_lock & 鎖)
前提條件:鎖由 當前線程鎖上[...]
從pthread_cond_wait手錶頁數:
的調用pthread_cond_wait()和 那麼pthread_cond_timedwait()函數 用來在條件變量阻塞。 它們被調用鎖定的互斥鎖 調用線程或未定義的 行爲將導致。
我不知道有任何其他選擇。
好的,所以絕對不要使用此係統。我將不得不尋找其他的東西。 – 2010-11-20 14:03:49
不,它不是。正如您從condition_variable
API規範中可以看到的那樣,它始終需要提供可鎖定的unique_lock
。但我並不真正瞭解問題所在。這個構造實現了一個「監視器」,如果沒有某種同步化對象,就不能完成...
如果你看一下boost :: condition_variable的使用模式,它並不是真的有意義沒有互斥使用。一旦進入,等待方法會自動解鎖互斥鎖,並將該線程添加到等待隊列中,然後在返回時鎖定互斥鎖:) – 2010-11-20 11:34:41