免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 14205 | 回复: 14
打印 上一主题 下一主题

在单cpu机器上,没有打开CONFIG_SMP和CONFIG_PREEMPT,是不是就不用考虑加锁了? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-13 18:00 |只看该作者 |倒序浏览
一直没搞清楚这个问题,过来问问.请知道的指点一下,多谢.

论坛徽章:
0
2 [报告]
发表于 2008-03-13 20:28 |只看该作者
至少单纯的自旋锁是不需要了

论坛徽章:
0
3 [报告]
发表于 2008-03-14 10:09 |只看该作者
该加的还要加。另外spinlock加上也没有影响,还更有利于以后的扩张。

论坛徽章:
0
4 [报告]
发表于 2008-03-14 11:22 |只看该作者
在Rusty Russell的大作<<Unreliable Guide To Locking>>中,提到
"在单CPU机器上,对于编译时打开了CONFIG_SMP,但没打开CONFIG_PREEMPT的内核
来说,自旋锁根本不存在.这是一个出色的设计策略:既然没有别人能在同时刻执行,就没
理由加锁.如果编译时同时打开了CONFIG_SMP和CONFIG_PREEMPT,自旋锁的作用就仅仅是禁止
抢占,这就足以防止任何竞态了."
为了可移植性,肯定是要加锁的,我只是想知道,在理论上,在单cpu机器上,如果没有打开CONFIG_SMP和CONFIG_PREEMPT,要是不加锁,会不会有问题?

论坛徽章:
0
5 [报告]
发表于 2008-03-14 12:07 |只看该作者

回复 #1 happy_flying 的帖子

即使没有SMP和抢占,某些情况下还是需要加锁的。
举个例子,中断和你的驱动程序同步。

论坛徽章:
0
6 [报告]
发表于 2008-03-14 12:10 |只看该作者
原帖由 happy_flying 于 2008-3-14 11:22 发表
在Rusty Russell的大作中,提到
"在单CPU机器上,对于编译时打开了CONFIG_SMP,但没打开CONFIG_PREEMPT的内核
来说,自旋锁根本不存在.这是一个出色的设计策略:既然没有别人能在同时刻执行,就没
理由加锁.如果编 ...

有很多这种类的锁阿,有些锁必须得加。

论坛徽章:
0
7 [报告]
发表于 2008-03-14 13:39 |只看该作者
原帖由 happy_flying 于 2008-3-13 18:00 发表
一直没搞清楚这个问题,过来问问.请知道的指点一下,多谢.

如果没有打开CONFIG_SMP和CONFIG_PREEMPT的话,应该可以不用加自旋锁,读写自旋锁。不过如果你把内核信号量归为锁的话,显然内核还是需要使用信号量的。

论坛徽章:
0
8 [报告]
发表于 2008-03-14 13:58 |只看该作者
原帖由 richardhesidu 于 2008-3-14 13:39 发表

如果没有打开CONFIG_SMP和CONFIG_PREEMPT的话,应该可以不用加自旋锁,读写自旋锁。不过如果你把内核信号量归为锁的话,显然内核还是需要使用信号量的。

信号量算是同步锁,在linux中读写锁不就是用它实现的?

论坛徽章:
0
9 [报告]
发表于 2008-03-14 14:23 |只看该作者
原帖由 圆点坐标 于 2008-3-14 13:58 发表

信号量算是同步锁,在linux中读写锁不就是用它实现的?

对,读写锁的确需要考虑。不过读写锁好像也不是由内核信号量来实现的吧

论坛徽章:
0
10 [报告]
发表于 2008-03-14 14:34 |只看该作者
原帖由 bluesky_jxc 于 2008-3-14 12:07 发表
即使没有SMP和抢占,某些情况下还是需要加锁的。
举个例子,中断和你的驱动程序同步。


需要保护,但是不需要spin_lock的保护啊.比如可能是local_irq_disable
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP