從Java編輯我想學習Objective-C的線程安全。到目前爲止,我已經湊近那個同時使用@synchronized,volatile和OSMemoryBarrier()。一個人暗示另一個人嗎?
- @Synchronized塊防止相同的代碼塊的併發訪問
- volatile變量保證翻過螺紋
- OSMemoryBarrier變化的可見性();確保訪問的正確順序
我的問題是:其中一個暗示其他一個或多個?如果我想要所有三種,我是否需要使用所有三種技術?
實施例:
volatile int first = 0;
volatile int second = 0;
[...]
@synchronized {
OSMemoryBarrier();
first++;
OSMemoryBarrier();
second++;
OSMemoryBarrier();
}
在Java所有三個進入和離開同步塊時和讀取或寫入的易失性可變時放心。真正?
所以進入和離開同步塊構成的存儲器障礙的通過?如果對一個變量的訪問受到一個同步塊的保護,變量不需要變化,因爲變更對其他線程始終可見? – Twilite
我發現了更多的揮發性這個問題的答案:http://stackoverflow.com/questions/6866206/volatile-and-createthread看來,波動不會造成內存屏障,是無用的線程之間的訪問同步。 – Twilite