我有下面的代碼訪問的變量與不同步
int i; //gobal var
Thread1:
{
...
i=some value;
}
Thread2:
{
if (i==2) dosomething();
else dosomethingelse();
i = 4;
}
我想寫它是線程安全的,而無需使用同步對象和C++標準的方式。
我的問題是如何有一個變量讀取/寫入不同線程訪問使用同步?我的要求是有一個布爾變量,可以有真或假。
揮發性變量是原子。
請注意,我不應該使用任何圖書館,如具有原子變量的TBB。
提出這個問題的原因是,我們不希望每次訪問線程中的變量時都要釋放和釋放semphore,因爲這個變量並不經常更改。
閱讀Boost Atomics和C++ 0x線程規格。 '我想把它寫成線程安全的,而不使用同步對象'sic,其他任何_want_ :) - 你可以爲不同的安全定義。如果模糊程度足夠好,並且您的代碼偶爾可以處理讀取「幻影」值,則只要有一個作者,就不需要鎖定。 (這可能對實時監控機制有用)。另外如果一個變量不會經常變化,它似乎是條件變量的一個好候選。 – sehe
可以用簡單的例子來展示如何在上面的場景中使用條件變量。我的理解是條件變量塊,而不是前進,但我想循環 – venkysmarty
有多少線程正在讀取變量,有多少線程可能會改變它? – NPE