Mutex 类
使用Mutex类来同步两个单独的程序。Mutex是一种原始的同步方式,其只对一个线程授予对共享资源的独占访问。
const string NutexName = "C"; using (var m = new Mutex(false, NutexName)) { if (!m.WaitOne(TimeSpan.FromSeconds(1), false)) { Console.WriteLine("运行1"); } else { Console.WriteLine("运行2"); Console.ReadLine(); m.ReleaseMutex(); } }
互斥量是全局的操作系统对象,请务必正确关闭互斥量。最好是使用Uing代码块来包裹互斥对象
当主程序启动,定义了一个制定名称的互斥量,设置initialOwner 标志为 false。这意味着如果互斥量已经被创建,则允许程序获取该互斥量。
如果没有获取到互斥量,程序则简单的显示Runing,等到直到按下了任何键释放该互斥量并退出。
如果再运行同样一个程序则会在5秒内尝试获取互斥量。如果此时在第一个程序中按下了任意键,第二个程序则会开始执行,然后如果等待保持五秒,就无法获取到。
SemaphoreSlim 类
SemaphoreSlim类是如何作为Semaphore类的轻量级版本的。该类显示了同时放一个资源的线程数量。
AutoResetEvent类
从一个线程向另一个线程发送通知,AutoReseEvent类可以通知等待的线程有某事件发生。
ManualResetEventSlim类
在线程间以更灵活的方式传递信号。
CountDownEvent 类
信号类来等待直到一定的数量操作完成。
Barrier 类
Barrier类用于组织多个线程及时在某个时刻碰面。其提供了一个回调函数,每次线程调用了SignalAndWait方法后该回调函数会被执行。
ReaderWriterLockSlim 类
使用ReaderWriterLockSlim 来创建一个线程安全的机制,在多线程中对一个集合进行读写操作。
ReaderWriterLockSlim代表了一个管理资源访问的锁,允许多个线程同时读取,以及独占写。
SpinWait类
如何不使用内核模型的方式来使线程等待。另外,我们介绍了SpinWait,它是一个混合同步构造,被设计为使用用户模式等待一段时间,
然后切换倒内核模式以节省CPU时间。