Chinaunix

标题: 请教spinlock的问题 [打印本页]

作者: rc_hz    时间: 2009-10-15 13:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: kouu    时间: 2009-10-15 13:49
1、keep trying过程中进程是可能被switch out的,但是进程状态还是RUNNING(不管正在执行,还是正在等待执行,都是RUNNING);
2、应该不会被switch out,要么内核抢占不支持、要么spinlock会禁用内核抢占;
作者: chenda0.03    时间: 2009-10-15 14:44
void __lockfunc _spin_lock(spinlock_t *lock)
{
        preempt_disable();
        spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
        LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock);
}

请看内核中的代码,是先关了抢占,再去加锁。应该是这样没错吧
作者: zyr-linux    时间: 2009-10-15 18:48
进程应该不会,中断,软中断什么的还是可以的。

spinlock_irq、spinlock_irqsave、spinlock_bh
作者: peimichael    时间: 2009-10-16 10:27
标题: 回复 #1 rc_hz 的帖子
1不会被抢占,因为循环获取锁之前已经调用preempt_disable()禁用内核抢占;(刚说错了,不好意思 )
2也不会被其他进程抢占,但是有可能被中断打断。除非使用spinlock_irqsave之类关中断的spinlock

[ 本帖最后由 peimichael 于 2009-10-16 11:49 编辑 ]
作者: eexplorer    时间: 2009-10-16 11:41
标题: 回复 #5 peimichael 的帖子
> 1如果开启了内核抢占,那么是可以被抢占的,但是如2楼所说,进程状态还是running而不是
> waiting

不会被抢占,因为在进入busy loop之前已经preempt_disable()了(3楼已经说了)
作者: peimichael    时间: 2009-10-16 11:47
原帖由 eexplorer 于 2009-10-16 11:41 发表
> 1如果开启了内核抢占,那么是可以被抢占的,但是如2楼所说,进程状态还是running而不是
> waiting

不会被抢占,因为在进入busy loop之前已经preempt_disable()了(3楼已经说了)



Sorry,看错了,
把上面的编辑掉啦,免得误人子弟




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2