一:锁机制的内核模式
1.在万不得已的情况下,不要使用内核模式的锁,因为代价太大。我们可以有其他方法代替,例如:混合锁机制,lock
2.事件锁
3.信号量
4.互斥锁
二:事件锁【开关锁,true、false的变量来进行控制】
1.自动事件锁【AutoResetEvent】
场景:可以用此所实现多线程环境下某个变量的自增。【true:表示终止状态,false:表示非终止】
private static AutoResetEvent auto = new AutoResetEvent(true);
static void Main(string[] args)
{
while (true)
{
Thread.Sleep(1000);
Console.WriteLine(“开始检票”);
auto.WaitOne();
Thread.Sleep(1000);
Console.WriteLine(“检票ing”);
auto.Set();
Thread.Sleep(1000);
Console.WriteLine(“检票结束”);
}
}
2.手动时间锁[ManualResetEvent]
private static ManualResetEvent manual = new ManualResetEvent(true);
manual.WaitOne();
manual.Set();
3.注意点:两者ManualResetEvent和AutoResetEvent是不一样的,所以不能混用。
4.Semaphore:[通过int整数来控制线程个数]
static Semaphore semaphore = new Semaphore(1,1);当前只能是一个线程通过
5.Mutex:互斥锁,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。
1 | private static Mutex mutex = new Mutex(); |