在這個線程在線圖書:http://www.albahari.com/threading/part4.aspx瞭解非阻塞線程同步和Thread.MemoryBarrier
那裏有中Thread.MemoryBarrier()
class Foo
{
int _answer;
bool _complete;
void A()
{
_answer = 123;
Thread.MemoryBarrier(); // Barrier 1
_complete = true;
Thread.MemoryBarrier(); // Barrier 2
}
void B()
{
Thread.MemoryBarrier(); // Barrier 3
if (_complete)
{
Thread.MemoryBarrier(); // Barrier 4
Console.WriteLine (_answer);
}
}
}
一個例子,我們有一個討論是否有任何線程阻塞回事與否?
即時通訊思想有一些,特別是考慮到
一個完整的圍欄是以2010年的時代桌面上,約十納秒。
在另一方面,全柵欄只應該disable instructions reodering and caching
它通過它的聲音沒有資格作爲線程阻塞,(不像lock
其中其明確表示線程等待其他繼續之前,就被擋住了,解除鎖定在這段時間)
關於該線程「阻塞狀態」。 IM在是否線程方面不說話或投入阻塞狀態不行,但是否有一些線程同步發生,這意味着一個線程是不是能,而其他不讓它這樣做跑,藉助於MemoryBarrier在這種情況下。
而且我還想得到明確瞭解每個屏障實現。例如,障礙2 - 它如何提供新鮮度保證,以及它如何與障礙物3連接?如果有人會詳細解釋什麼是每個屏障的目的(如果1或2或3或4不在那裏可能會出錯),我認爲id大大提高了我對此的理解。
編輯:它現在大多數清楚了什麼1,2,3做什麼。然而,這3個不是還不清楚。
確定它並不意味着直接,我只是認爲它可能被認爲是一種證據,它的邏輯命令需要時間來執行。 –
@Valentin它可以被視爲證據,但它只是在這裏的情況:) – dlev
沒問題,看看我的編輯在問題的結尾,而當我們在它的時候,鎖定語句把線程置於阻塞狀態(只是爲了澄清該線程阻塞狀態定義)? –