链表锁的问题
时间:2010-11-17
来源:互联网
那么在遍历这个链表和头插节点的时候,还需要用锁吗?
个人感觉不需要用锁,不知道是否正确啊?
还有用hlist_add_head和hlist_add_head_rcu在这种情况下会有不同吗?
作者: 瀚海书香 发布时间: 2010-11-17
遍历这个链表的时候,应该是需要加锁的。不然这个链表正在被执行写动作,你又去读
作者: Godbach 发布时间: 2010-11-17
作者: funix_zjx 发布时间: 2010-11-17
回复 Godbach
如果链表只会用头插法添加节点和遍历节点。我感觉遍历的时候应该不需要用锁的。但是好像内核里都用了rcu_read_lock了
作者: 瀚海书香 发布时间: 2010-11-17
如果链表只会用头插法添加节点和遍历节点。我感觉遍历的时候应该不需要用锁的。
瀚海书香 发表于 2010-11-17 11:21
那你怎么能保证遍历的时候,这个链表没有被写入呢,如果这时正好有一个插入动作呢?
作者: Godbach 发布时间: 2010-11-17
明白了。看了一下list.h源码,原来hlist_add_head_rcu是两步指针的赋值操作,不是原子操作,应该用锁。
如果直接按下面使用的话(不带头结点的链表)应该就不需要锁了:
newnode为要插入的节点,list为链表。
newnode->next=list;
list=newnode.
呵呵,可惜内核不是这样用的。
作者: 瀚海书香 发布时间: 2010-11-17
newnode为要插入的节点,list为链表。
newnode->next=list;
list=newnode.
多核情况下,这也需要加锁吧
作者: Godbach 发布时间: 2010-11-17
真正修改链表的时候就是 list=newnode
这应该是个原子操作吧? 如果是原子操作,为什么会需要锁呢?
作者: 瀚海书香 发布时间: 2010-11-17
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28