我有兩個線程,其中一個在緊密循環工作,以及偶爾需要執行與第一同步其他:並行線程:造成線程飢餓快速的重新鎖定
// thread 1
while(1)
{
lock(work);
// perform work
unlock(work);
}
// thread 2
while(1)
{
// unrelated work that takes a while
lock(work);
// synchronizing step
unlock(work);
}
我的本意是線程2可以通過取鎖來有效地暫停線程1並執行必要的同步。線程1也可以通過解鎖來提供暫停,並且如果線程2沒有等待鎖定,則重新鎖定並返回工作。
我遇到的問題是互斥體不公平,所以線程1很快重新鎖定了互斥體並且導致線程2不能正常運行。我試圖使用pthread_yield
,並且目前爲止它似乎運行正常,但我不是確保它適用於所有系統/內核數量。有沒有辦法保證即使在多核系統上,線程1也會始終屈服於線程2?
處理此同步過程的最有效方法是什麼?
你在你的問題已經描述了沒有關係公平,如果你想線程2是具有較高優先級線程,然後1,一個的方式來實現這一目標,通過使用條件變量。 – Michael
這個問題與[* Fair fair section(Linux)*](http://stackoverflow.com/q/6449732/134633)非常相似。 – caf