免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2276 | 回复: 6
打印 上一主题 下一主题

请教spinlock的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-15 13:25 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2009-10-15 13:49 |只看该作者
1、keep trying过程中进程是可能被switch out的,但是进程状态还是RUNNING(不管正在执行,还是正在等待执行,都是RUNNING);
2、应该不会被switch out,要么内核抢占不支持、要么spinlock会禁用内核抢占;

论坛徽章:
0
3 [报告]
发表于 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);
}

请看内核中的代码,是先关了抢占,再去加锁。应该是这样没错吧

论坛徽章:
0
4 [报告]
发表于 2009-10-15 18:48 |只看该作者
进程应该不会,中断,软中断什么的还是可以的。

spinlock_irq、spinlock_irqsave、spinlock_bh

论坛徽章:
0
5 [报告]
发表于 2009-10-16 10:27 |只看该作者

回复 #1 rc_hz 的帖子

1不会被抢占,因为循环获取锁之前已经调用preempt_disable()禁用内核抢占;(刚说错了,不好意思 )
2也不会被其他进程抢占,但是有可能被中断打断。除非使用spinlock_irqsave之类关中断的spinlock

[ 本帖最后由 peimichael 于 2009-10-16 11:49 编辑 ]

评分

参与人数 1可用积分 +30 收起 理由
T-bagwell + 30 我很赞同

查看全部评分

论坛徽章:
0
6 [报告]
发表于 2009-10-16 11:41 |只看该作者

回复 #5 peimichael 的帖子

> 1如果开启了内核抢占,那么是可以被抢占的,但是如2楼所说,进程状态还是running而不是
> waiting

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

论坛徽章:
0
7 [报告]
发表于 2009-10-16 11:47 |只看该作者
原帖由 eexplorer 于 2009-10-16 11:41 发表
> 1如果开启了内核抢占,那么是可以被抢占的,但是如2楼所说,进程状态还是running而不是
> waiting

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



Sorry,看错了,
把上面的编辑掉啦,免得误人子弟
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP