定时器(System.Threading)线程安全

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)

Ste*_*ary 5

它是"线程安全的",因为调用Change实际上不会破坏计时器.

但是,它肯定不是"线程安全的",因为你肯定有竞争条件(timerCallback2当你进入时,不可能确保它没有运行DoStuff).