免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1781 | 回复: 1
打印 上一主题 下一主题

[CPU及多核] mutex [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-15 18:09 |只看该作者 |倒序浏览

mutex可以在smp上实现互斥吗?谢

论坛徽章:
0
2 [报告]
发表于 2013-05-16 10:31 |只看该作者
大家可以参考:http://bbs.chinaunix.net/forum.p ... p;authorid=10234898
设想:两个core,两个线程A和B,分别运行在core1和core2上,互斥锁mutex_x
1)当A获取到mutex_X,B又去获取mutex_x,显然,获取失败,此时B让出CPU,给其他线程运行
2)后来当A释放mutex_x之后,回去唤醒B,但是在core2上,需要调度执行的是其他线程,那么B只有等待被再次调度执行才能获取到mutex_x
3) 在B等待调度的过程中,A获得调度,又去申请mutex_x,此时A又能成功获得mutex_x
即:B得到mutex_x的等待时间不确定,可能会很长,而使用spinlock的话,当A一释放mutex,B可以立即获得,并继续执行进入临界区。
结论:
1)使用mutex,有切换,效率上就有影响
2)但同样对临界区实现了互斥,可以使用在SMP上。
3)至于在SMP上,是否需要使用mutex,要考虑应用场景,不断进行系统优化。
两种锁适用于不同场景:
如果是多核处理器,如果预计线程等待锁的时间很短,短到比线程两次上下文切换时间要少的情况下,使用自旋锁是划算的。
如果是多核处理器,如果预计线程等待锁的时间较长,至少比两次线程上下文切换的时间要长,建议使用互斥量。
注:两次上下文切换时间在实际系统中并不总是确定的,因此这里仅仅是参考方案,需要根据实际进行test,做优化。
不妥之处,请指正!

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP