博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
互斥锁Mutex与信号量Semaphore的区别
阅读量:5261 次
发布时间:2019-06-14

本文共 663 字,大约阅读时间需要 2 分钟。

转自

多线程编程中,常常会遇到这两个概念: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();//释放线程}

转载于:https://www.cnblogs.com/noble/p/4144015.html

你可能感兴趣的文章
java 中 finally里面写了return 会发生什么?
查看>>
Web Api 利用 cors 实现跨域
查看>>
hdu 3938 并查集
查看>>
instanceof
查看>>
BZOJ 题目1036: [ZJOI2008]树的统计Count(Link Cut Tree,改动点权求两个最大值和最大值)...
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>
2015/8/4 告别飞思卡尔,抛下包袱上路
查看>>
软件开发与模型
查看>>
161017、SQL必备知识点
查看>>
kill新号专题
查看>>
MVC学习系列——Model验证扩展
查看>>
C# GC 垃圾回收机制
查看>>
mysqladmin 修改和 初始化密码
查看>>
字符串
查看>>
vue2.x directive - 限制input只能输入正整数
查看>>
实现MyLinkedList类深入理解LinkedList
查看>>
自定义返回模型
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>
HDU 4122
查看>>