如果线程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;
}
以上代码段中的障碍物是否需要一个或多个?