rem*_*dao 2 c# multithreading timer
有谁知道这段代码是否是线程安全的,或者在调用timer2.Change时是否必须使用锁?
Timer timer1 = new Timer(timerCallback1);
Timer timer2 = new Timer(timerCallback2);
timer1.Change(5000, 5000);
timer2.Change(3000, 3000);
public void timerCallback1(object state)
{
timer1.Change(Timeout.Infinite, Timeout.Infinite);
timer2.Change(Timeout.Infinite, Timeout.Infinite);
DoStuff();
timer1.Change(5000, 5000);
timer2.Change(3000, 3000);
}
Run Code Online (Sandbox Code Playgroud)
它是"线程安全的",因为调用Change
实际上不会破坏计时器.
但是,它肯定不是"线程安全的",因为你肯定有竞争条件(timerCallback2
当你进入时,不可能确保它没有运行DoStuff
).