内核模式锁机制

一:锁机制的内核模式

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(“检票结束”);
}

}

1573283569284

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
2
3
4
5
private static Mutex mutex = new Mutex();

mutex.WaitOne();

mutex.ReleaseMutex();