免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: happy_flying
打印 上一主题 下一主题

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

论坛徽章:
0
11 [报告]
发表于 2008-03-14 16:25 |只看该作者
原帖由 richardhesidu 于 2008-3-14 14:23 发表

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

I do not remember this clearly.

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

回复 #10 baohuaihuai 的帖子

你说得对,我没有考虑到禁用中断,这么说来,的确可以不用spinlock。
不过这个只是讨论,在实际中一般都会用,因为在禁用了smp和抢占的情况下,spinlock被优化成一条空语句,也不会带来任何开销

论坛徽章:
0
13 [报告]
发表于 2008-03-15 08:44 |只看该作者
有些锁不一定只用在 SMP 结构上
比如需要对一个处于临界态的 hash table 做链表处理,那么可能就要用到读写锁、互斥锁等
不同场合,用不同的锁

论坛徽章:
0
14 [报告]
发表于 2008-03-15 11:38 |只看该作者

回复 #13 platinum 的帖子

呵呵,没想到把大牛也引来了,幸甚!
虽然我在实际编程中都是加锁的,但是我对这块的理解还真是比较模糊,希望能给予指点。
就拿kernel的bridge module作为例子吧,它在中断处理程序的下半部里运行,而下半部是可中断的,
但是不能被它自己所中断。bridge里维护着一个全局的hash链表(比如CAM表),假设只有bridge自己能访问并修改它,
我想请问一下,如果不加锁,会发生竞态吗?如果会,能否给举个例子描述一下。多谢了。

论坛徽章:
0
15 [报告]
发表于 2008-03-17 00:55 |只看该作者
哪里哪里,不是什么大牛,在这里我也是个小学生,呵呵
没有读过 bridge 的具体实现,但是看过很多代码,所有对 hash table 的处理都用了锁,比如 netfilter
至于 UP 内核的 hash table 是否会有竞态产生我个人认为要看代码的具体实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP