免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ydfgic

[C] 【最终版 & 总结】自实现自旋锁 与 mutex,spinlock比较(结果令人吃惊) [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-07-29 13:56 |显示全部楼层
晕乎, while(i++ < DELAY_NR) 就是最恶劣的忙等。

论坛徽章:
0
发表于 2011-07-29 14:02 |显示全部楼层
回复 11# 群雄逐鹿中原
但是有什么办法呢?
我找不出有什么可以改进的方法。也许我可以设置条件放弃时间片。但违背了自旋锁的设计原则。
posix的自旋锁 效率还低下些

论坛徽章:
4
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:11
发表于 2011-07-29 14:03 |显示全部楼层
哎……自旋锁是用在多核上面的啊……是两个不同核心同步的时候用的哇哇……你一次开20个线程跑两个CPU自旋锁的效率能不低么?所谓自旋就是忙等,等另外一个核心同步。在你的场景里面自旋效率越低证明它实现得越好= =

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-07-29 14:05 |显示全部楼层
回复  群雄逐鹿中原
但是有什么办法呢?
我找不出有什么可以改进的方法。也许我可以设置条件放弃时间片。 ...
ydfgic 发表于 2011-07-29 14:02



    有啊,禁止线程切换,比如关中断。我写嵌入式都这么干的。x86怎么做,不太懂。

论坛徽章:
0
发表于 2011-07-29 14:39 |显示全部楼层
回复 9# 群雄逐鹿中原


同意,用户空间的自旋锁根本就不靠谱

论坛徽章:
0
发表于 2011-07-29 14:53 |显示全部楼层
最近在研究原子操作,按网上一些资料实现了个自旋锁
拿来和 posix 的mutex,spinlock 一起测,结果出乎我意 ...
ydfgic 发表于 2011-07-29 11:39


由于你的测试代码里面,while循环里面基本上只有进出锁,所以lock是经常会碰撞的。(你设想一下那20个线程都在做什么)

当锁碰撞的时候,spin lock会浪费大量cpu,这是已知的特性。

在没有锁碰撞的测试用例里面,spinlock大概比mutex快一倍。

如何测试锁的性能,可以参考IBM的文章。我忘了具体连接了。不过测锁性能并不是简单的写个while循环就可以的。

论坛徽章:
0
发表于 2011-07-29 15:24 |显示全部楼层
有啊,禁止线程切换,比如关中断。我写嵌入式都这么干的。x86怎么做,不太懂。
群雄逐鹿中原 发表于 2011-07-29 14:05



   不会汇编 :(,关不了中断。
我只能尽力写到这个层面了。
在你的启发下我更新了,结果提高了很高的效率,代码在1楼更新了。

论坛徽章:
0
发表于 2011-07-29 15:26 |显示全部楼层
由于你的测试代码里面,while循环里面基本上只有进出锁,所以lock是经常会碰撞的。(你设想一下那20个线 ...
wwwsq 发表于 2011-07-29 14:53



    其实我也考虑到碰撞问题,开20个就是想模拟繁忙的情况。实现已经改进,加入了放弃时间片的选择。没想到效率提高非常大,是mutex的2-3倍。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-07-29 15:39 |显示全部楼层
何不将  do_hash(*foo);  \
            if((*foo % 11) == 1)    \
去掉?

论坛徽章:
0
发表于 2011-07-29 15:47 |显示全部楼层
所以说没有正确使用spinlock也是很悲剧的,锁颗粒要细,以及最好不要用在经常锁等待的场合。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP