在多线程中,为了防止多个线程对一个变量赋值的更改或者一段代码段的逻辑的修改,需要对这个赋值动作或者代码段加锁。
private AutoResetEvent _autoSetEvent = new AutoResetEvent(false);
在启动一个线程后但是需等待时:
if (!isStart)
{
Logger.Info("侦听线程进入等待!");
_autoSetEvent.WaitOne();
Logger.Info("侦听线程再次运行!");
}
需要启动时:
_autoSetEvent.Set();
private object _startLock = new object();
lock (_startLock)
{
isStart = _boolStarted;
}
关于lock对一个对象加锁要注意,可以在递归中使用,lock只会生效于多线程,对于单线程,自身已经是锁的所有者,并不会出现为了继续加锁等待原有锁释放,递归中不会发生锁死。
本文探讨了在多线程环境下如何通过使用AutoResetEvent和lock关键字来防止多个线程同时修改同一变量或代码段,确保数据的一致性和线程安全。详细介绍了AutoResetEvent的WaitOne和Set方法的使用场景,以及lock关键字在多线程和递归中的正确应用。
398

被折叠的 条评论
为什么被折叠?



