免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4377 | 回复: 10

[C] 单链表如何支持 并发? [复制链接]

论坛徽章:
0
发表于 2012-12-06 21:05 |显示全部楼层
一个多线程程序,10个线程都会 对这个链表进行 读写操作,这样就会导致效率 很低。
用读写锁 应该会好一点,
请问 还有其他 优化的办法吗???
求教了。

论坛徽章:
151
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:48
发表于 2012-12-07 09:20 |显示全部楼层
可以参考学习一下mysql,要么设计一个仅支持表级别的锁,要么设计一个可以支持行级的锁;;

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-12-07 09:55 |显示全部楼层
用线程间通信的办法把操作请求都归并到一个线程里去操作,不过这样做好复杂。

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
发表于 2012-12-07 09:55 |显示全部楼层
google 无锁编程

另,貌似云风就实现过一个无锁链表,还开源了。

论坛徽章:
0
发表于 2012-12-07 10:12 |显示全部楼层
如果链表比较稳定,每次访问只针对某个,不做轮询,用数组代替链表就可以了。
如果用链表,常规都要锁,数组是直接访问元素,不需要锁。环形缓冲等就是利用这个原理。
现在做视频处理就用这种方法,读出来放到内存里,标识上,用的时候直接来这个地址取,不用链表。
用于数据元素个数相对有限的情况下。

论坛徽章:
0
发表于 2012-12-07 10:52 |显示全部楼层
元素加锁,遇到锁,直接下一个,不等待。

论坛徽章:
0
发表于 2012-12-07 13:05 |显示全部楼层
你的CPU要是支持CAS指令,就可以实现lock-free的容器
如果必须用锁,让临界区尽可能的短,尽量减小锁的粒度,只锁必要的数据
能想到的优化就这些了

论坛徽章:
0
发表于 2012-12-07 13:30 |显示全部楼层
如果想并发改变链表中段链节的相对位置,则算法比较复杂,关键是要在算法中维护一个并发操作的偏序关系。

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
发表于 2012-12-07 14:41 |显示全部楼层
intel tbb,里面有lock free的link list

论坛徽章:
0
发表于 2012-12-07 15:15 |显示全部楼层
楼主觉得用读写锁的话,有什么缺点呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP