c# - 这个(volatile bool)总是线程安全的吗?

标签 c# thread-safety volatile

我想知道这是否是完全线程安全的,以及是否应该使用 volatile 关键字。

using System.Threading;

class Program
{
    private static volatile bool _restart = true;

    private static void Main()
    {
        while (_restart)
        {
            // Do stuff here every time for as long as _restart is true
            Thread.Sleep(1);
        }
    }

    private static void SomeOtherThread()
    {
        Thread.Sleep(1000);
        _restart = false;
    }
}

我想是的,但我想仔细检查一下,因为我不是 100% 确定我只是想确定一下。

我认为 volatile 关键字是必需的,因为这样就不可能将值缓存在寄存器或类似的优化中。

最佳答案

当然,SLaks 的回答是正确的,但要回答您的问题:在两个方面都是肯定的:它是安全的,应该声明为 volatile。

关于c# - 这个(volatile bool)总是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8779385/

相关文章:

c# - 为什么在 ASP.Net Core 2 MVC 中更改密码后登录

Java嵌套ConcurrentHashMap是线程安全的吗?

c++ - 什么是 “exception vomiting” ?

C# GC 的使用以及如何跟踪内存泄漏

c# - 多个用户使用的 Winform 应用程序登录

C : printf() not thread safe with flockfile()

java - 在几乎不改变执行顺序的情况下,如何分配变量会导致严重的性能下降?

C#从一个线程设置字典对象是否线程安全,从另一个线程获取

c# - 与使用 Interlocked 类相比,使用 volatile 关键字有什么优势吗?

C# 实现类,其行为类似于 2dim 数组