如果一个线程 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;
}
是否需要上述代码段中的一个/两个(或更多)障碍?
最佳答案
不,同步机制会产生隐式内存栅栏。一个线程修改的所有数据在线程加入后都是可见的。
关于c# - 加入线程时是否需要内存屏障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12444891/