当前位置:  技术问答>linux和unix

smp机器上,拥有自旋锁时睡眠的问题

    来源: 互联网  发布时间:2016-09-11

    本文导语:  本帖最后由 lttzdllf 于 2009-07-17 11:02:04 编辑 在smp机器上, 一个进程A获得了自旋锁,然后执行schedule_timeout休眠10s(只是测试), 同时另外一个进程B也在试图获得这个自旋锁。 我看了网上其它人的解释,说这种情况会发生死...

本帖最后由 lttzdllf 于 2009-07-17 11:02:04 编辑
在smp机器上,
一个进程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 上。 

另外需要加锁的资源,你很可能不知道会有多少个进程同时去访问它,所以,不确定的因素太多了。

所以这样的代码,是非常不安全的,也许有些时候不会出问题,一旦出了问题,就是致命的问题,而且很难排查,
所以写代码还是严谨点好。


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 有谁了解net-smp,能介绍一下吗?谢谢!
  • 升级内核如何让他支持smp?
  • 哪位大虾知道smp_num_cpus 定义在哪个头文件里?
  • Rad Hat 7.2是否默认支持SMP?
  • 如何不安装成smp(多处理器模式)
  • 关于smp的问题
  • suse enterprise server9带的内核有bigsmp和smp的区分,具体是什么意思?
  • qemu -smp
  • 请问如何编译Linux7.2下支持双CPU(smp)的新内核?
  • 如何在SMP系统下,锁住其他CPU,只让一颗CPU工作?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3