深入浅出多线程系列之十五:Reader /Write Locks (读写锁)
线程安全的一个很经常的需求是允许并发读,但是不允许并发写,例如对于文件就是这样的。
ReaderWriterLockSlim 在.net framework 3.5的时候就提供了,它是用来代替以前的”fat”版本的”ReaderWriterLock”
这两个类,有两种基本的锁----一个读锁,一个写锁。
写锁是一个完全排他锁。
读锁可以
http://www.cyqdata.cn/cnblogs/article-detail-39428
深入浅出多线程系列之十四:线程的交会(Thread Rendezvous)
在上篇文章中我们使用了Wait和Pulse 实现了Countdown
接下来我们可以使用刚刚写的Countdown 类来实现两个线程的交会。
class Rendezvous { static&
http://www.cyqdata.cn/cnblogs/article-detail-39262
深入浅出多线程系列之十三:使用Wait和Pulse 来模拟一些同步构造
你可能在上篇文章中深入浅出多线程系列之十二:双向信号和竞赛 注意到了这个模式:两个Waiting 循环都要下面的构造:
lock(_locker){ while(!_flag) Monitor.Wait(_locker);
http://www.cyqdata.cn/cnblogs/article-detail-39007
深入浅出多线程系列之十一:生产者/消费者队列
上次我们使用AutoResetEvent实现了一个生产/消费者队列。这一次我们要使用Wait和Pulse方法来实现一个更强大的版本,它允许多个消费者,每一个消费者都在自己的线程中运行。
我们使用数组来跟踪线程。
Thread[] _workers;
通过跟踪线程可以让我们在所有的线程都结束后再结束我们的队列任务。
每一个消费者线程都执行一个叫做Consume
http://www.cyqdata.cn/cnblogs/article-detail-38808
深入浅出多线程系列之十:Wait 和Pulse
Signaling with Wait and Pulse(等待和暂停的信号)
早期谈论过等待事件句柄(调用Wait的线程在没有收到另一个线程的通知前会一直阻塞)。
Monitor借助它的静态方法Wait,Pulse,PulseAll提供了一个更给力的信号构造,使用这些方法和lock语句,你可以自己实现AutoResetEvent,ManualResetEvent和Semaphore
http://www.cyqdata.cn/cnblogs/article-detail-38713