当前位置: 技术问答>linux和unix
smp机器上,拥有自旋锁时睡眠的问题
来源: 互联网 发布时间:2016-09-11
本文导语: 本帖最后由 lttzdllf 于 2009-07-17 11:02:04 编辑 在smp机器上, 一个进程A获得了自旋锁,然后执行schedule_timeout休眠10s(只是测试), 同时另外一个进程B也在试图获得这个自旋锁。 我看了网上其它人的解释,说这种情况会发生死...
一个进程A获得了自旋锁,然后执行schedule_timeout休眠10s(只是测试),
同时另外一个进程B也在试图获得这个自旋锁。
我看了网上其它人的解释,说这种情况会发生死锁。 但是按照我自己的理解在进程A睡眠期间,
进程B会一直忙式等待这个自旋锁,等进程A被唤醒后,执行完自己的操作,然后解锁。这是进程
B就能够得到这个自旋锁,应该不会发生死锁啊。。。。。
另外有一个问题,我在网上看到一句话
“另外自旋锁不允许任务睡眠(持有自旋锁的任务睡眠会造成自死锁——因为睡眠有可能造成持有锁的内核任务被重新调度,而再次申请自己已持有的锁)”
原帖地址是http://blog.csdn.net/sandflee/archive/2009/04/10/4062596.aspx
我不明白的是,这个拥有自旋锁的进程被唤醒后会接着上次的指令继续往下执行,怎么又会去再次申请自己已持有的锁??
|
再次请教:在SMP环境下,我觉得如果是两个进程A在一个cpuA上,进程B在另一个cpuB上。进程B只是在cpuB忙等待
进程A在cpuA上还是会被调度的啊!!!!!!
=============================================
那么,如果 进程B 是被 cpu A调度的呢? 就会产生死锁了。
除非你将进程B 绑在 cpuB 上。
另外需要加锁的资源,你很可能不知道会有多少个进程同时去访问它,所以,不确定的因素太多了。
所以这样的代码,是非常不安全的,也许有些时候不会出问题,一旦出了问题,就是致命的问题,而且很难排查,
所以写代码还是严谨点好。
进程A在cpuA上还是会被调度的啊!!!!!!
=============================================
那么,如果 进程B 是被 cpu A调度的呢? 就会产生死锁了。
除非你将进程B 绑在 cpuB 上。
另外需要加锁的资源,你很可能不知道会有多少个进程同时去访问它,所以,不确定的因素太多了。
所以这样的代码,是非常不安全的,也许有些时候不会出问题,一旦出了问题,就是致命的问题,而且很难排查,
所以写代码还是严谨点好。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。