信号量的实现机制

时间:2022-07-04 15:04:36
自旋锁是锁总线实现的
那么信号量是怎么实现的? 也是锁总线吗?
那么为什么信号量在多核的情况下 不能实现同步功能

请大牛指点一下

11 个解决方案

#1


Linux系统内核的锁机制一般通过3 种基本方式来实现,即原语、关中断和总线锁。
参考:
http://blog.sina.com.cn/s/blog_4c275d990100de45.html###
http://www.kernel.org/pub/linux/kernel/people/rusty/kernel-locking/c93.html

#2


想请教的是 
信号量在多核下能实现同步吗?
信号量不是以自旋锁为前提的吗?
自旋锁都能实现多核同步
信号量能不能实现多核同步?

#3


我所理解的,
信号量跟自旋锁在多核下都可以实现同步。
但自旋锁一般用于多线程环境,也就是说,在多核的情况下,同一个进程的线程分配到不同的核上,一直在运行,自旋的意思就是自己一直检测直到条件满足就继续运行,没有一个挂起切换的状态。
而信号量的话必需经常挂起就绪运行这个状态。

所以同步都是可以实现,只是在运行的多核机器的多线程程序自旋锁会更快。

引用 2 楼 eclipse_2 的回复:
想请教的是
信号量在多核下能实现同步吗?
信号量不是以自旋锁为前提的吗?
自旋锁都能实现多核同步
信号量能不能实现多核同步?

#4



 信号量在多核下能实现同步吗? 可以
 信号量不是以自旋锁为前提的吗?不是,自旋锁只在SMP有效。
 自旋锁都能实现多核同步, 信号量能不能实现多核同步?应当可以

#5


明白了 谢谢各位大牛的解答

顺便问个小问题
linux是从那个内核版本开始支持SMP的?

#6


引用 5 楼 eclipse_2 的回复:
明白了 谢谢各位大牛的解答

顺便问个小问题
linux是从那个内核版本开始支持SMP的?


好象是2。0版本吧

#7


引用 5 楼 eclipse_2 的回复:
明白了 谢谢各位大牛的解答

 顺便问个小问题
 linux是从那个内核版本开始支持SMP的?
2.4

#8


引用 6 楼 eclipse_2 的回复:
引用 5 楼 eclipse_2 的回复:
明白了 谢谢各位大牛的解答

顺便问个小问题
linux是从那个内核版本开始支持SMP的?


好象是2。0版本吧


2.0的内核已经有支持SMP,2.6时代在逐渐完善。

http://www.ibm.com/developerworks/cn/linux/l-linux-smp/index.html

这方面的东西可以去IBM.com看看。

#9


3Q

#10


自旋锁是锁总线实现的
那么信号量是怎么实现的? 也是锁总线吗?
也是锁总线
lock;

那么为什么信号量在多核的情况下 不能实现同步功能

谁说的?

都能实现同步,只是应用场合不同,spin_lock用在不能睡眠(中断)或获得资源较快的情况下,信号量用在较长时间才能获得资源的情况下,因为信号量会引起睡眠,所以上下文切换的时间小于这个时间,那么用它就算合理

#11


引用 10 楼 cdbdyx 的回复:
自旋锁是锁总线实现的
那么信号量是怎么实现的? 也是锁总线吗?
也是锁总线
lock;

那么为什么信号量在多核的情况下 不能实现同步功能

谁说的?

都能实现同步,只是应用场合不同,spin_lock用在不能睡眠(中断)或获得资源较快的情况下,信号量用在较长时间才能获得资源的情况下,因为信号量会引起睡眠,所以上下文切换的时间小于这个时间,那么用它就算合理

恩 你说的是对的

#1


Linux系统内核的锁机制一般通过3 种基本方式来实现,即原语、关中断和总线锁。
参考:
http://blog.sina.com.cn/s/blog_4c275d990100de45.html###
http://www.kernel.org/pub/linux/kernel/people/rusty/kernel-locking/c93.html

#2


想请教的是 
信号量在多核下能实现同步吗?
信号量不是以自旋锁为前提的吗?
自旋锁都能实现多核同步
信号量能不能实现多核同步?

#3


我所理解的,
信号量跟自旋锁在多核下都可以实现同步。
但自旋锁一般用于多线程环境,也就是说,在多核的情况下,同一个进程的线程分配到不同的核上,一直在运行,自旋的意思就是自己一直检测直到条件满足就继续运行,没有一个挂起切换的状态。
而信号量的话必需经常挂起就绪运行这个状态。

所以同步都是可以实现,只是在运行的多核机器的多线程程序自旋锁会更快。

引用 2 楼 eclipse_2 的回复:
想请教的是
信号量在多核下能实现同步吗?
信号量不是以自旋锁为前提的吗?
自旋锁都能实现多核同步
信号量能不能实现多核同步?

#4



 信号量在多核下能实现同步吗? 可以
 信号量不是以自旋锁为前提的吗?不是,自旋锁只在SMP有效。
 自旋锁都能实现多核同步, 信号量能不能实现多核同步?应当可以

#5


明白了 谢谢各位大牛的解答

顺便问个小问题
linux是从那个内核版本开始支持SMP的?

#6


引用 5 楼 eclipse_2 的回复:
明白了 谢谢各位大牛的解答

顺便问个小问题
linux是从那个内核版本开始支持SMP的?


好象是2。0版本吧

#7


引用 5 楼 eclipse_2 的回复:
明白了 谢谢各位大牛的解答

 顺便问个小问题
 linux是从那个内核版本开始支持SMP的?
2.4

#8


引用 6 楼 eclipse_2 的回复:
引用 5 楼 eclipse_2 的回复:
明白了 谢谢各位大牛的解答

顺便问个小问题
linux是从那个内核版本开始支持SMP的?


好象是2。0版本吧


2.0的内核已经有支持SMP,2.6时代在逐渐完善。

http://www.ibm.com/developerworks/cn/linux/l-linux-smp/index.html

这方面的东西可以去IBM.com看看。

#9


3Q

#10


自旋锁是锁总线实现的
那么信号量是怎么实现的? 也是锁总线吗?
也是锁总线
lock;

那么为什么信号量在多核的情况下 不能实现同步功能

谁说的?

都能实现同步,只是应用场合不同,spin_lock用在不能睡眠(中断)或获得资源较快的情况下,信号量用在较长时间才能获得资源的情况下,因为信号量会引起睡眠,所以上下文切换的时间小于这个时间,那么用它就算合理

#11


引用 10 楼 cdbdyx 的回复:
自旋锁是锁总线实现的
那么信号量是怎么实现的? 也是锁总线吗?
也是锁总线
lock;

那么为什么信号量在多核的情况下 不能实现同步功能

谁说的?

都能实现同步,只是应用场合不同,spin_lock用在不能睡眠(中断)或获得资源较快的情况下,信号量用在较长时间才能获得资源的情况下,因为信号量会引起睡眠,所以上下文切换的时间小于这个时间,那么用它就算合理

恩 你说的是对的