【发布时间】:2012-09-08 19:42:32
【问题描述】:
如果线程 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;
}
是否需要上述 sn-p 中的一个/两个(或多个)障碍?
【问题讨论】:
-
我怀疑是否需要内存屏障。如果是这样,那么 Thread.Join 将毫无用处,很多人都会遇到麻烦。 Join 等待线程完成,这将包括将值分配给变量。
标签: c# .net multithreading thread-safety memory-barriers