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