yuxh 发表于 2013-08-26 17:58

本帖最后由 yuxh 于 2013-08-26 18:19 编辑

mark,有空再来看下代码

smalloc 发表于 2013-08-27 11:13

各位高手,请教下。这个代码怎么执行增加删除节点啊?

zylthinking 发表于 2013-08-27 12:37

回复 22# smalloc

github 上有个测试程序, 可以看到使用方法


   

mesh4444 发表于 2013-10-29 08:50

大概看了一眼,LZ这个应该不算是无锁链表吧,应该叫做链式无锁队列……
还是支持一下吧,能自己写基础数据结构的,都不容易……

windoze 发表于 2013-10-29 17:00

回复 1# zylthinking

这个是“用链表实现的队列”,不是“链表”,你看你连在中加插元素的功能都没有怎么算是“链表”。
另外你不觉得应该在那些lkf_node指针前面加个volatile么?

zylthinking 发表于 2013-10-29 19:28

windoze 发表于 2013-10-29 17:00 static/image/common/back.gif
回复 1# zylthinking

这个是“用链表实现的队列”,不是“链表”,你看你连在中加插元素的功能都没有怎 ...

哪里该加?

windoze 发表于 2013-10-29 19:29

回复 26# zylthinking

所有操作链表的lkf_node */lkf_node **类型变量的前面。

zylthinking 发表于 2013-10-29 19:30

windoze 发表于 2013-10-29 19:29 static/image/common/back.gif
回复 26# zylthinking

所有操作链表的lkf_node */lkf_node **类型变量的前面。

我找了找, 似乎没有需要加的地方; 你找一个出来, 一起分析分析

windoze 发表于 2013-10-29 21:28

回复 28# zylthinking

volatile不是必须的,但加上可以防止编译器犯傻。

另外,第20行的宏、第39行,还有第45行到50行
虽然没仔细看你的代码,但是我相信如果执行次序和你写的不一致会有麻烦,感觉需要加memory barrier。

zylthinking 发表于 2013-10-29 22:40

windoze 发表于 2013-10-29 21:28 static/image/common/back.gif
回复 28# zylthinking

volatile不是必须的,但加上可以防止编译器犯傻。


编译器为什么犯傻?
那几行为什么会出问题? 内存屏障是在cpu发现不了依赖关系时有意义的, 明显的依赖关系存在为何需要内存屏障; 39 行其实是常量赋值不知注意了没有
页: 1 2 [3] 4 5 6 7 8 9 10
查看完整版本: 多线程读写无锁链表: 之前有没有相同的实现? (更新)