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

问个关于自旋锁的问题

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

    本文导语:  书上说:进程申请自旋锁,如果得不到就原地自旋。我很疑惑,那么持有锁的进程不是一直得不到执行,怎么释放锁呢?然后还有一说,持有锁进程禁止调度,如果禁止调度,那么还要锁干嘛? | ...

书上说:进程申请自旋锁,如果得不到就原地自旋。我很疑惑,那么持有锁的进程不是一直得不到执行,怎么释放锁呢?然后还有一说,持有锁进程禁止调度,如果禁止调度,那么还要锁干嘛?

|
“书上说:进程申请自旋锁,如果得不到就原地自旋。我很疑惑,那么持有锁的进程不是一直得不到执行,怎么释放锁呢?然后还有一说,持有锁进程禁止调度,如果禁止调度,那么还要锁干嘛?”

如果是单核单线程处理器:自旋锁会退化为空操作。


“那么持有锁的进程不是一直得不到执行”,--持有锁的进程将得到执行,直到释放自旋锁,这也是为什么“持有锁进程禁止调度”。

设想一个持有自旋锁的进程被调度出处理器,那么另一个进程想获取同一个自旋锁,将获取不到,在那原地打转,导致原来的进程也得不到运行,进而死锁(多核心可以不死)。

这也是为什么在持有自旋锁过程中要禁止调度的原因。

|
书上说:进程申请自旋锁,如果得不到就原地自旋。我很疑惑,那么持有锁的进程不是一直得不到执行,怎么释放锁呢?

如果是多核的,自旋锁只在一个cpu上自旋,拥有锁的进程可以在别的cpu上运行释放锁
如果是单核的,只有当是可抢占的,拥有锁的进程也可以把cpu抢过来
如果单核,又是不可抢占的,就不能使用自旋锁了

然后还有一说,持有锁进程禁止调度,如果禁止调度,那么还要锁干嘛?

如果被调度出去了,别的拥有锁的进程怎么办

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












  • 相关文章推荐
  • 自旋锁和读写自旋锁、信号量和读写信号量分别有什么区别?
  • 中断处理函数中使用自旋锁的疑问
  • 自旋锁使用
  • 内核同步中 自旋锁的用法??
  • spin_lock为什么不自旋?
  • linux中的自旋锁相关的宏的源代码的疑问
  • 在获得自旋锁后为什么不能够进行可能引起休眠的操作?
  • 书上说,中断用自旋锁,进程,用信号量,但是,为什么中断不能用信号量?
  • 关于有自旋锁进程不能被抢占和调度
  • 有关sql server中的自旋锁
  • 嵌入式2.6.8对自旋锁分配内存失败
  • 内核自旋锁spin_lock,获取已锁住的锁时Linux死机
  • netfilter中能否使用自旋锁数组啊?
  • Java锁之自旋锁详解


  • 站内导航:


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

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

    浙ICP备11055608号-3