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

2023-11-29

有谁知道这段代码是否是线程安全的,或者我在调用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);
}

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

定时器(System.Threading)线程安全 的相关文章

随机推荐