我有一個類型爲double
的共享變量。這個變量將被兩個線程訪問。一個線程永遠只寫變量,而另一個線程永遠只讀變量。共享變量的爭用條件
我還有比賽條件嗎?如果是的話,C++中有沒有一種「簡單」的方式來實現原子訪問?如果讀取數比寫入數多得多,我如何有效地實現它?我是否需要將變量標記爲volatile
?
編輯:確定「讀取器」線程週期性地在批量數據上工作,並且新值的傳播不是時間敏感的。我可以聲明寫入器線程將寫入的另一個臨時變量,而不是實現複雜的互鎖,而我沒有很好的方法來測試。然後,當閱讀器完成一個批處理時,它可以將臨時值自動傳播到實際變量。那會是無競賽條件的嗎?
@Jesse:許多編譯器不具有該頭的工作實現呢。 – 2012-04-17 22:38:19
一個簡單的互斥體可以在這裏工作,以確保您正在閱讀良好的價值。當寫入線程正在使用變量時,互斥鎖將阻止對變量的訪問,並在讀取線程完成工作時解鎖它。在unix和windows上,實現都非常簡單。 – Chris911 2012-04-17 22:38:47
@ Chris911:互斥鎖不必要的昂貴,可能會阻塞一個線程。有一個可以等待的實現。 – 2012-04-17 22:45:22