multithreading - 信号量和互斥量在实现上有什么区别?

标签 multithreading synchronization mutex semaphore

我读到互斥锁和二进制信号量只有一个方面不同,在互斥锁的情况下,锁定线程必须解锁,但在信号量中,锁定和解锁线程可以不同吗?

哪一种更有效率?

最佳答案

假设您知道信号量和互斥量之间的基本区别:

为了快速、简单的同步,请使用临界区。

要跨进程边界同步线程,请使用互斥锁。

要同步对有限资源的访问,请使用信号量。

除了互斥体有一个所有者这一事实之外,这两个对象可以针对不同的用途进行优化。互斥锁被设计为只保留很短的时间;违反此规定可能会导致性能不佳和调度不公平。例如,一个正在运行的线程可能被允许获取一个互斥锁,即使另一个线程已经被阻塞在它上面,创建一个 僵局 .信号量可以提供更多的公平性,或者可以使用多个条件变量来强制公平性。

关于multithreading - 信号量和互斥量在实现上有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4953496/

相关文章:

php - 并发、多处理、并行、多线程混淆了它们之间的关系

java - 在 JSch 中使用连接池

multithreading - 超线程和 CPU 密集型进程

java - Object.wait() 方法在抛出异常时是否重新获取监视器?

ios - 将核心数据与数据库同步-更新记录非常慢

c++ - CUDA、互斥量和 atomicCAS()

c - 线程同步

由静态数据字段引起的消费者文件中的 C++ 错误链接

android - 在 Android Java 类中调用 "getContentResolver "

c# - 如何在 C# 中创建命名的 autoresetevent?