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 创建有名对象时,是进程级别的。

本文标签: 信号量变量区别条件互斥