繁体   English   中英

信号量与条件变量-抽象级别

[英]Semaphores vs. condition variables - level of abstraction

当我搜索我如何能在C ++ 11使用旗语,我看到人们经常建议我做一个出来的std::mutexstd::condition_variable这个职位为例)。 这使我认为信号量是比互斥量和条件变量更高级别的抽象。

但是,在学习了操作系统类之后,我现在知道在内核中 ,信号量通常是最低级别的抽象。 信号量通过禁用中断来实现,而锁本质上是值为1的信号量,而条件变量是从头开始实现的,而不使用信号量或锁。 因此,信号量(在内核级别)似乎无论如何都不比锁或条件变量更高级。

所以我的问题是,我的结论是“信号量(在C ++ 11中)是一个更高级别的抽象”,仅仅是标准库的局限性的产物吗? 还是由于用户级同步和内核级同步之间的差异导致的?

这是用户级同步和内核级同步之间差异的结果。

在内核中声明状态时,不会声明您引用的内核。 标准库必须与内核完全无关,从而选择最通用的接口。 并非所有内核都以完全相同的方式实现锁定。

例如,Linux内核中锁的实现比初始化为值1的基本信号量要微妙得多。也许您听说过futexes

最后,由于与互斥锁相比,信号灯的使用非常少,因此选择互斥锁作为标准库的通用接口是有意义的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM