当前位置: 技术问答>linux和unix
问个关于自旋锁的问题
来源: 互联网 发布时间:2016-11-11
本文导语: 书上说:进程申请自旋锁,如果得不到就原地自旋。我很疑惑,那么持有锁的进程不是一直得不到执行,怎么释放锁呢?然后还有一说,持有锁进程禁止调度,如果禁止调度,那么还要锁干嘛? | ...
书上说:进程申请自旋锁,如果得不到就原地自旋。我很疑惑,那么持有锁的进程不是一直得不到执行,怎么释放锁呢?然后还有一说,持有锁进程禁止调度,如果禁止调度,那么还要锁干嘛?
|
“书上说:进程申请自旋锁,如果得不到就原地自旋。我很疑惑,那么持有锁的进程不是一直得不到执行,怎么释放锁呢?然后还有一说,持有锁进程禁止调度,如果禁止调度,那么还要锁干嘛?”
如果是单核单线程处理器:自旋锁会退化为空操作。
“那么持有锁的进程不是一直得不到执行”,--持有锁的进程将得到执行,直到释放自旋锁,这也是为什么“持有锁进程禁止调度”。
设想一个持有自旋锁的进程被调度出处理器,那么另一个进程想获取同一个自旋锁,将获取不到,在那原地打转,导致原来的进程也得不到运行,进而死锁(多核心可以不死)。
这也是为什么在持有自旋锁过程中要禁止调度的原因。
如果是单核单线程处理器:自旋锁会退化为空操作。
“那么持有锁的进程不是一直得不到执行”,--持有锁的进程将得到执行,直到释放自旋锁,这也是为什么“持有锁进程禁止调度”。
设想一个持有自旋锁的进程被调度出处理器,那么另一个进程想获取同一个自旋锁,将获取不到,在那原地打转,导致原来的进程也得不到运行,进而死锁(多核心可以不死)。
这也是为什么在持有自旋锁过程中要禁止调度的原因。
|
书上说:进程申请自旋锁,如果得不到就原地自旋。我很疑惑,那么持有锁的进程不是一直得不到执行,怎么释放锁呢?
如果是多核的,自旋锁只在一个cpu上自旋,拥有锁的进程可以在别的cpu上运行释放锁
如果是单核的,只有当是可抢占的,拥有锁的进程也可以把cpu抢过来
如果单核,又是不可抢占的,就不能使用自旋锁了
然后还有一说,持有锁进程禁止调度,如果禁止调度,那么还要锁干嘛?
如果被调度出去了,别的拥有锁的进程怎么办
如果是多核的,自旋锁只在一个cpu上自旋,拥有锁的进程可以在别的cpu上运行释放锁
如果是单核的,只有当是可抢占的,拥有锁的进程也可以把cpu抢过来
如果单核,又是不可抢占的,就不能使用自旋锁了
然后还有一说,持有锁进程禁止调度,如果禁止调度,那么还要锁干嘛?
如果被调度出去了,别的拥有锁的进程怎么办