Net框架中C#实现多线程的同步方法详解 本文主要描述在C#中线程同步的方法
线程的基本概念网上资料也很多就不再赘述了
直接接入主题,在多线程开发的应用中,线程同步是不可避免的
Net 框架中,实现线程同步主要通过以下的几种方式来实现,在MSDN 的线程指南中已经讲了几种,本文结合作者实际中用到的方式一起说明一下
维护自由锁(InterLocked)实现同步 2
监视器(Monitor)和互斥锁(lock) 3
读写锁(ReadWriteLock) 4
系统内核对象 1) 互斥(Mutex), 信号量(Semaphore), 事件(AutoResetEvent/ManualResetEvent) 2) 线程池 除了以上的这些对象之外实现线程同步的还可以使用 Thread
Join 方法
这种方法比较简单,当你在第一个线程运行时想等待第二个线程执行结果,那么你可以让第二个线程Join进来就可以了
自由锁(InterLocked) 对一个 32 位的整型数进行递增和递减操作来实现锁,有人会问为什么不用++或--来操作
因为在多线程中对锁进行操作必须是原子的,而++和--不具备这个能力
InterLocked 类还提供了两个另外的函数 Exchange, CompareExchange 用于实现交换和比较交换
Exchange 操作会将新值设置到变量中并返回变量的原来值: int oVal = InterLocked
Exchange(ref val, 1)
监视器(Monitor) 在MSDN 中对 Monitor 的描述是: Monitor 类通过向单个线程授予对象锁来控制对对象的访问
Monitor 类是一个静态类因此你不能通过实例化来得到类的对象
Monitor 的成员可以查看 MSDN,基本上 Monitor 的效果和 lock 是一样的,通