在多线程程序中常遇到的另外一个情况就是让线程等待某件事的发生。这件事可以是任何事。它可以是设备上的数据就绪了,也可以是传送带到达了合适的位置或数据已经写入磁盘了,等等。另外还要讨论一下多个线程等待某个事件的情况。
为了实现这个功能,我们可以使用条件变量(condition variable)或是更简单的睡眠锁(sleepon lock)。
要使用睡眠锁,你需要执行几个操作。先看看要调用的函数,之后再看看你该如何使用这个锁:
阅读全文…
读写锁(readers/writer lock)的具体含义是文如其名:对一个资源有多个读者而无写入者,或者是只有一个写入者而没有其他的写入者或读出者。
这种情况是经常会用到的,这就需要有一种专用于这个目的的特殊的同步元素。
很多情况下,你需要有个数据结构在一堆线程之间共享。当然,你希望在一个时刻只能有一个线程可以对这个数据结构执行写入操作。如果同时有多个线程能对其写入,那么就有可能一个线程写入的数据会覆盖其他线程所写入的数据。为了防止这种情况发生,写线程可以用独占的方式获取“读写锁”,也就是说只有它才能够访问这个数据结构。不过需要注意这个访问的独占性严格受控于随意的方式。也就是说这是由系统设计者来处理的,是由系统设计者来确保所有访问那个数据区域的线程通过读写锁进行同步。
阅读全文…
近期评论