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


    转自互斥锁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();//释放操作V,count++
    }
    classmutex
    {
    public:
        waitMutex();//阻塞线程,直到其它线程释放互斥锁
        releaseMutex();//释放线程
    }



  • 相关阅读:
    docker (2) 私有仓库的建立
    golang (5) http 请求分析
    java (1)
    golang (5) ---工程管理
    Mac使用一些经验
    数组的遍历
    进制
    数组的初始化
    数组基本概念
    博客开始更新第一天
  • 原文地址:https://www.cnblogs.com/noble/p/4144015.html
Copyright © 2020-2023  润新知