c# - 加入线程时是否需要内存屏障?

标签 c# .net multithreading thread-safety memory-barriers

如果一个线程 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/

相关文章:

c# - 如何使用 Azure 存储队列发送 XML 文件?

c# - 实例化预制件返回 NullReferenceException 错误

.net - 如何找到 .Net Remoting 分配的端口号?

java - 使用什么工具包可以在绘画中制作多个线程? Swing、GWT、FX、Qt 还是什么?

java - Observable.create() subscribeOn 和 observeOn 不工作

c# - Visual Studio 在连接到 MySQL 时显示错误

c# - ASP.net 菜单仅显示 Web.sitemap 中的某些节点

.net - 使用 Connect-AzAccount 服务主体从 dotnet 中调用 PowerShell 脚本并进行身份验证

c# - Fineuploader with Azure,空图像问题

java - 我什么时候应该在多个线程中使用不同的实例或共享实例?