互斥体实现的是一种简单的互斥机制,在任一时刻,只允许一个线程临
界区中活动(在使用读写互斥体的情况下,是一个写入者线程或多个读取者线程)
。特别地,要让一个线程进入临界区,另一个线程就必须离开它。
这意味着,在使用互斥体时,要做到这样的事情是不可能的:在临界区内
挂起一个线程,过一段时间再唤醒它(例如,在某个条件变成真时)。
为了解决这一问题,Ice提供了监控器。简单地说,监控器是一种用于
保护临界区的同步机制:和互斥体一样,同一时刻在临界区内,只能有一
个线程在活动。但是,监控器允许你在临界区内挂起线程;这样,另一个
线程就能进入临界区。第二个线程可以离开监控器(从而解除监控器的加
锁),或者在监控器内挂起自己;不管是哪一种情况,原来的线程都会被
唤醒,继续在监控器内执行。这样的行为可以扩展到任意数目的线程,所
以在监控器中可以有好几个线程挂起。
与互斥体相比,监控器提供的互斥机制更为灵活,因为它们允许线程检
查某个条件,如果条件为假,就让自己休眠;该线程会由其他某个改变了
该条件的线程唤醒。
namespace IceUtil {
template <class T>
class Monitor {
public:
void lock() const;
void unlock() const;
bool tryLock() const;
void wait() const;
bool timedW

最低0.47元/天 解锁文章
814

被折叠的 条评论
为什么被折叠?



