ICE实现线程安全之监控器


互斥体实现的是一种简单的互斥机制,在任一时刻,只允许一个线程临
界区中活动(在使用读写互斥体的情况下,是一个写入者线程或多个读取者线程)
。特别地,要让一个线程进入临界区,另一个线程就必须离开它。
这意味着,在使用互斥体时,要做到这样的事情是不可能的:在临界区内
挂起一个线程,过一段时间再唤醒它(例如,在某个条件变成真时)。

为了解决这一问题,Ice提供了监控器。简单地说,监控器是一种用于
保护临界区的同步机制:和互斥体一样,同一时刻在临界区内,只能有一
个线程在活动。但是,监控器允许你在临界区内挂起线程;这样,另一个
线程就能进入临界区。第二个线程可以离开监控器(从而解除监控器的加
锁),或者在监控器内挂起自己;不管是哪一种情况,原来的线程都会被
唤醒,继续在监控器内执行。这样的行为可以扩展到任意数目的线程,所
以在监控器中可以有好几个线程挂起。

与互斥体相比,监控器提供的互斥机制更为灵活,因为它们允许线程检
查某个条件,如果条件为假,就让自己休眠;该线程会由其他某个改变了

该条件的线程唤醒。


namespace IceUtil {
    template <class T>
    class Monitor {
    public:
        void lock() const;
        void unlock() const;
        bool tryLock() const;
        void wait() const;
        bool timedW

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值