首页 > 编程知识 正文

信号量和锁的区别(二值信号量和互斥量的区别)

时间:2023-05-03 12:52:13 阅读:66012 作者:4153

在多线程编程中,经常会遇到两个概念: Mutex和Semaphore。 两者的区别是下面的:

有人做过以下类比:

Mutex是钥匙,可以一个人拿着进房间。 出来的时候把钥匙交给队列的最上面。 常用用法是用于串行化对临界区代码的访问,以避免并行执行此代码。

Semaphore是一个可以容纳n人的房间,人不满意可以进来,人满了就要等别人出来。

如果N=1,则称为二进制摘要,常用用法是用于限制对某个资源的并发访问。 在某些系统上,二进制性能和矩阵没有区别

tom:0px; bord :initial; word-wrap:normal; word-break:normal; line-height:21px; color:rgb(50,62,50); font-family:simsun; font-size:14px; text-align:left; background-color:rgb(24,41,123)"> 信号量可以设置计数器,而互斥锁只有0和1的关系。

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


class semaphore

{

public:

    Semaphore(int count, int max_count);

    ~Semaphore();

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

    void Signal();//释放操作V,count++

}

classmutex

{

public:

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

    releaseMutex();//释放线程

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。