Avatar ·

在C#中:Volatile、Interlocked或lock——为简单标志的线程安全该选哪个?

大家好!我是一名初学C#的开发者,正在尝试理解多线程。我有一个简单的类,用于启动后台线程。该线程应在`_isRunning`标志为true时持续运行。另一个线程(例如UI线程)可以将此标志设为false,以停止后台工作。 以下是简化代码: ```csharp public class Worker { private bool _isRunning = true; public void Start() { Task.Run(() => { while (_isRunning) { // 一些工作 Console.WriteLine("Working..."); Thread.Sleep(100); } }); } public void Stop() { _isRunning = false; } } ``` 我了解到,简单的bool读写并非CPU级别的原子操作,并且编译器可能会优化循环,将`_isRunning`的值缓存到寄存器中。这样一来,线程将永远无法看到值的更改。 在C#中有三种工具可以用于解