互斥锁Mutex与信号量Semaphore的区别

多线程编程中,常常会遇到这两个概念:MutexSemaphore,两者之间区别如下:

 

有人做过如下类比:

Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个,一般的用法是用于串行化对临界区代码的访问,保证这段代码不会被并行的运行。

Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。

对于N=1的情况,称为binary semaphore,一般的用法是,用于限制对于某一资源的同时访问。在有的系统Binary semaphoreMutex是没有差异的

 

信号量可以设置计数器,而互斥锁只有01的关系。

Semaphore semaphore = new Semaphore(1);表示同时访问资源的许可数量只有一个。这个语义可以实现一个Mutex互斥锁:


class semaphore

{

public:

    Semaphore(int count, int max_count);

    ~Semaphore();

    void Unsignal();//等待操作P,count--,如果count==0则等待

    void Signal();//释放操作Vcount++

}

classmutex

{

public:

    waitMutex();//阻塞线程,直到其它线程释放互斥锁

    releaseMutex();//释放线程

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值