免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ydfgic
打印 上一主题 下一主题

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2011-07-29 13:56 |只看该作者
晕乎, while(i++ < DELAY_NR) 就是最恶劣的忙等。

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

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
13 [报告]
发表于 2011-07-29 14:03 |只看该作者
哎……自旋锁是用在多核上面的啊……是两个不同核心同步的时候用的哇哇……你一次开20个线程跑两个CPU自旋锁的效率能不低么?所谓自旋就是忙等,等另外一个核心同步。在你的场景里面自旋效率越低证明它实现得越好= =

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



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

论坛徽章:
0
15 [报告]
发表于 2011-07-29 14:39 |只看该作者
回复 9# 群雄逐鹿中原


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

论坛徽章:
0
16 [报告]
发表于 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
17 [报告]
发表于 2011-07-29 15:24 |只看该作者
有啊,禁止线程切换,比如关中断。我写嵌入式都这么干的。x86怎么做,不太懂。
群雄逐鹿中原 发表于 2011-07-29 14:05



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

论坛徽章:
0
18 [报告]
发表于 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
19 [报告]
发表于 2011-07-29 15:39 |只看该作者
何不将  do_hash(*foo);  \
            if((*foo % 11) == 1)    \
去掉?

论坛徽章:
0
20 [报告]
发表于 2011-07-29 15:47 |只看该作者
所以说没有正确使用spinlock也是很悲剧的,锁颗粒要细,以及最好不要用在经常锁等待的场合。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP