当前位置: 技术问答>linux和unix
信号量的实现机制
来源: 互联网 发布时间:2016-07-30
本文导语: 自旋锁是锁总线实现的 那么信号量是怎么实现的? 也是锁总线吗? 那么为什么信号量在多核的情况下 不能实现同步功能 请大牛指点一下 | 自旋锁是锁总线实现的 那么信号量是怎么实现的...
自旋锁是锁总线实现的
那么信号量是怎么实现的? 也是锁总线吗?
那么为什么信号量在多核的情况下 不能实现同步功能
请大牛指点一下
那么信号量是怎么实现的? 也是锁总线吗?
那么为什么信号量在多核的情况下 不能实现同步功能
请大牛指点一下
|
自旋锁是锁总线实现的
那么信号量是怎么实现的? 也是锁总线吗?
也是锁总线
lock;
那么为什么信号量在多核的情况下 不能实现同步功能
谁说的?
都能实现同步,只是应用场合不同,spin_lock用在不能睡眠(中断)或获得资源较快的情况下,信号量用在较长时间才能获得资源的情况下,因为信号量会引起睡眠,所以上下文切换的时间小于这个时间,那么用它就算合理
那么信号量是怎么实现的? 也是锁总线吗?
也是锁总线
lock;
那么为什么信号量在多核的情况下 不能实现同步功能
谁说的?
都能实现同步,只是应用场合不同,spin_lock用在不能睡眠(中断)或获得资源较快的情况下,信号量用在较长时间才能获得资源的情况下,因为信号量会引起睡眠,所以上下文切换的时间小于这个时间,那么用它就算合理
|
信号量在多核下能实现同步吗? 可以
信号量不是以自旋锁为前提的吗?不是,自旋锁只在SMP有效。
自旋锁都能实现多核同步, 信号量能不能实现多核同步?应当可以
|
2.0的内核已经有支持SMP,2.6时代在逐渐完善。
http://www.ibm.com/developerworks/cn/linux/l-linux-smp/index.html
这方面的东西可以去IBM.com看看。
|
Linux系统内核的锁机制一般通过3 种基本方式来实现,即原语、关中断和总线锁。
参考:
http://blog.sina.com.cn/s/blog_4c275d990100de45.html###
http://www.kernel.org/pub/linux/kernel/people/rusty/kernel-locking/c93.html
参考:
http://blog.sina.com.cn/s/blog_4c275d990100de45.html###
http://www.kernel.org/pub/linux/kernel/people/rusty/kernel-locking/c93.html
|
我所理解的,
信号量跟自旋锁在多核下都可以实现同步。
但自旋锁一般用于多线程环境,也就是说,在多核的情况下,同一个进程的线程分配到不同的核上,一直在运行,自旋的意思就是自己一直检测直到条件满足就继续运行,没有一个挂起切换的状态。
而信号量的话必需经常挂起就绪运行这个状态。
所以同步都是可以实现,只是在运行的多核机器的多线程程序自旋锁会更快。
信号量跟自旋锁在多核下都可以实现同步。
但自旋锁一般用于多线程环境,也就是说,在多核的情况下,同一个进程的线程分配到不同的核上,一直在运行,自旋的意思就是自己一直检测直到条件满足就继续运行,没有一个挂起切换的状态。
而信号量的话必需经常挂起就绪运行这个状态。
所以同步都是可以实现,只是在运行的多核机器的多线程程序自旋锁会更快。
|
2.4