Aid*_*api 22 c# volatile thread-safety
我想知道这是否完全是线程安全的,以及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;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为是,但我想仔细检查,因为我不是100%肯定我只是想确定.
我认为volatile关键字是必需的,因为它永远不可能将值缓存在寄存器或类似的优化中.
SLa*_*aks 10
您应该用a替换整个构造ManualResetEvent,这既是线程安全的又是更快的.
private static readonly ManualResetEvent ev = new ManualResetEvent();
private static void Main()
{
ev.WaitOne()
}
private static void SomeOtherThread()
{
Thread.Sleep(1000);
ev.Set();
}
Run Code Online (Sandbox Code Playgroud)