スレッド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はかなり役に立たず、多くの人が困っているだろう。 Joinは、スレッドが終了するまで待機します。これには、変数に値を割り当てることが含まれます。 – Despertar
このスレッドを見る:http://stackoverflow.com/questions/6581848/memory-barrier-generators – Laurijssen