multithreading - "benaphores"是否值得在现代操作系统上实现?

标签 multithreading mutex atomic semaphore

在我作为 BeOS 程序员的日子里,我阅读了 this article作者:Benoit Schillings,描述了如何创建“benaphore”:一种使用原子变量强制执行关键部分的方法,避免在常见(无争用)情况下获取/释放互斥体的需要。

我觉得这很聪明,而且看起来你可以在任何支持原子递增/递减的平台上做同样的事情。

另一方面,这看起来像是可以很容易地包含在标准互斥锁实现本身中的东西……在这种情况下,在我的程序中实现这个逻辑将是多余的,并且不会提供任何好处。

有谁知道现代锁定 API(例如 pthread_mutex_lock()/pthread_mutex_unlock())是否在内部使用这个技巧?如果不是,为什么不呢?

最佳答案

您的文章描述的内容在当今很普遍。通常它被称为“Critical Section”,它由一个互锁变量、一堆标志和一个内部同步对象(Mutex,如果我没记错的话)组成。一般在争用很少的场景下,Critical Section完全在用户态执行,不涉及内核同步对象。这保证了快速执行。当竞争高时,内核对象用于等待,释放时间片以加快周转时间。

一般来说,在当今时代实现同步原语意义不大。操作系统带有各种各样的此类对象,并且它们在比单个程序员想象的更广泛的场景中进行了优化和测试。发明、实现和测试良好的同步机制确实需要数年时间。这并不是说尝试没有值(value):)

关于multithreading - "benaphores"是否值得在现代操作系统上实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1635416/

相关文章:

c - 如何在gcc中编译带有线程的C程序?

c++ - 何时在多线程中使用 volatile ?

transactions - 领域驱动设计 : Handling atomic operations and transactions

c# - 确定在 C# 中的线程池中等待的线程数

c++ - RPi2、OpenMAX、死锁

java - 在 Java 程序中创建和销毁多个 AWT-Shutdown 和 AWT-EventQueue 线程

c++ - 将互斥量数组传递给函数时出现错误 C2664

c - 生产者消费者线程和互斥体

c++ - 通过 copy-and-swap 分配与两个锁

c++ - 指针写入不是原子的最常见配置是什么?