admin管理员组文章数量:1599529
文章目录
- semaphore 、mutex 、condition_variable 的区别
semaphore 、mutex 、condition_variable 的区别
一:信号量 (semaphore) 是一种轻量的同步原件,用于制约对共享资源的并发访问。在可以使用
两者时,信号量能比条件变量更有效率。
二:互斥(mutex)算法避免多个线程同时访问共享资源。这会避免数据竞争,并提供线程间的同步支持。
**三:条件变量(condition_variable)**是允许多个线程相互交流的同步原语。它允许一定量的线程等待(可以定时)另一线程的提醒,然后再继续。条件变量始终关联到一个互斥。
1: semaphore 对 acquire 和 release 操作没有限制,可以在不同线程操作;可以仅在线程 A 里面acquire,仅在线程 B 里面 release。mutex 的 lock 和 unlock 必须在同一个线程配对使用;也就是说线程 A 内 mutex 如果 lock了,必须在线程 A 内 unlock,线程 B 内 lock 了,也必须在线程 B 内 unlock。
2: semaphore 和 mutex 是可以独立使用的;condition_variable 必须和 mutex 配对使用。
3: semaphore 一般用于控制多个并发资源的访问或者控制并行数量;mutex 一般是起到同步访问一个资源的作用。同一时刻,mutex 保护的资源只能被一个线程访问;semaphore 的保护对象上面是可以有多个线程在访问的。mutex 是同步,semaphore 是并行。
4: 由于 condition_variable 和 mutex 结合使用,condition_variable 更多是为了通知、顺序之类的控制。
5: C++语言中的 mutex、semaphore、condition 和系统级的概念不同。都是线程级别的,也就是不能跨进程控制的。要区别于 windows api 的 mutex、semaphore、event。windows 系统上这几个 api 创建有名对象时,是进程级别的。
版权声明:本文标题:c++之 semaphore(信号量) 、mutex(互斥量) 、condition_variable(条件变量) 的区别 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1728324645a1154278.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论