免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2789 | 回复: 9

[Linux] 用户态, 如何保证操作临界资源时不进行进程切换? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-07-18 00:42 |显示全部楼层
     想想以下场景:  多进程,  使用共享内存. 每个进程访问共享内存上的信息时, 需要锁操作.  如果进程0拿住锁(自旋锁)后, 因为调度切换出去; 其他进程因为无法拿到锁而导致空跑.  假如能够保证每个进程在锁获得后, 释放前不被调度切换出去, 就不会导致其他进程因为得不到锁而空跑.
     请问: 是否有办法做到?  或者有想法, 建议的, 请不吝指教

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2012-07-18 09:15 |显示全部楼层
woshizzb 发表于 2012-07-18 00:42
想想以下场景:  多进程,  使用共享内存. 每个进程访问共享内存上的信息时, 需要锁操作.  如果进程0拿住锁(自旋锁)后, 因为调度切换出去; 其他进程因为无法拿到锁而导致空跑.


为什么在一开始要用自旋锁?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-07-18 10:09 |显示全部楼层
回复 2# MMMIX


    为了高性能.  带睡眠的锁不行

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2012-07-18 10:17 |显示全部楼层
回复 3# woshizzb


    你是要高性能还是高实时性?你测试过可阻塞的锁性能不够么?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-07-18 10:21 |显示全部楼层
回复 4# MMMIX

如果对临界资源的访问时间很短(如更新引用计数、修改状态等),等待锁的线程只要稍等片刻即可取得资源的访问权,这个开销要远远小于进入休眠再被唤醒。   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2012-07-18 12:29 |显示全部楼层
回复 5# woshizzb


    这种情况用自旋锁也没什么。但是其他进程空跑这个问题在实测的情况下严重么?不严重的话还是算了,这种锁的实现是需要内核配合的(保证持锁进程持续占用CPU直到释放锁),而其使用又是在用户空间,太容易出问题了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-07-18 13:40 |显示全部楼层
回复 6# MMMIX

    感谢回复.  还没有实际产品, 这是个前期考虑到的问题.   所以不知道实际会产生多大影响


   

论坛徽章:
0
发表于 2012-07-19 21:40 |显示全部楼层
应该不能确定进程不被切换,系统中断了,要在跑之前的进程,看看进程调度方法,把它设置为最高优先级。。。但是这样也不能保证的呀。。。不然一个最高优先级的程序可以占用所用cpu资源了。。?

论坛徽章:
0
发表于 2012-08-22 12:48 |显示全部楼层
感觉不能, 用户状态下的进程很多情况下会被换出CPU啊, 像中断, 时间片用尽。。。

论坛徽章:
0
发表于 2012-08-23 09:38 |显示全部楼层
假如能够保证每个进程在锁获得后, 释放前不被调度切换出去,

如果有些有问题的进程或者恶意的进程,拿了锁后,忘记或者故意不释放,这样系统就没响应了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP