如果一個線程A產生另一個線程B,其目的是寫入一個變量V,然後等待它終止,是否需要內存屏障來確保後續讀取線程A上的V是新鮮的?我不確定在終止/加入操作中是否存在任何隱含的障礙,導致它們變得多餘。加入線程時是否需要內存屏障?
下面是一個例子:
public static T ExecuteWithCustomStackSize<T>
(Func<T> func, int stackSize)
{
T result = default(T);
var thread = new Thread(
() =>
{
result = func();
Thread.MemoryBarrier(); // Required?
}
, stackSize);
thread.Start();
thread.Join();
Thread.MemoryBarrier(); // Required?
return result;
}
是否是在上面的代碼段中的任一障礙/兩個(或更多)所需?
我懷疑是否需要內存屏障。如果他們那時Thread.Join將是無用的,並且很多人會遇到麻煩。連接等待直到線程完成,這將包括將值分配給變量。 – Despertar
看到這個主題:http://stackoverflow.com/questions/6581848/memory-barrier-generators – Laurijssen