免费注册 查看新帖 |

Chinaunix

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

[内核同步] spin_lock的两个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-15 20:34 |只看该作者 |倒序浏览
1。多个任务在等待一个spin_lock,锁被释放后,这些同时等待的任务是以什么样的顺序决定谁先获得锁的? 是按申请锁的先后还是任务的优先级?或者是随机的?
2. 如果在调试的过程中发现锁被占用没有释放,如何知道是哪个任务占有锁没有释放?

论坛徽章:
0
2 [报告]
发表于 2013-01-15 21:30 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2013-01-15 21:46 |只看该作者
那smp时,比如多个cpu在自旋等待,哪个会优先获得呢?
回复 2# stephen_du


   

论坛徽章:
0
4 [报告]
发表于 2013-01-15 22:23 |只看该作者
1.这个应该与构架有关
2.就armv7构架来说,spin_lock的实现为:
       static inline void __raw_spin_lock(raw_spinlock_t *lock)
        {
                unsigned long tmp;
                __asm__ __volatile__(
        "1:        ldrex        %0, [%1]\n"
        "        teq        %0, #0\n"
        "        strexeq        %0, %2, [%1]\n"
        "        teqeq        %0, #0\n"
        "        bne        1b"
                : "=&r" (tmp)
                : "r" (&lock->lock), "r" (1)
                : "cc");
                smp_mb();
        }
实在看不出任何机制能够保证多个cpu有固定顺序拿到spin_lock锁,谁刚好抢先执行成功一个loop,谁就拿到吧。

论坛徽章:
0
5 [报告]
发表于 2013-01-15 22:42 |只看该作者
(1) 锁的获取基本上都是随机的
(2) 调试过程中你可以在调用spin_lock的地方加入调试信息,打印出current->pid就知道那个进程了。

论坛徽章:
0
6 [报告]
发表于 2013-01-15 23:01 |只看该作者
新版本内核中的自旋锁加锁方式是按照加锁的顺序决定谁先获取锁
调试的话,应该能够根据现场的寄存器判断出哪一个序号正占有锁

论坛徽章:
0
7 [报告]
发表于 2013-01-16 09:22 |只看该作者
回复 6# luoyan_xy


    楼上是正解!!
http://www.ibm.com/developerworks/cn/linux/l-cn-spinlock/

论坛徽章:
0
8 [报告]
发表于 2013-01-16 10:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2013-01-16 11:35 |只看该作者
frogsu 发表于 2013-01-15 22:42
(2) 调试过程中你可以在调用spin_lock的地方加入调试信息,打印出current-> ...


在调用的地方打印这种方法我也考虑过,不过如果在中断上下文加锁的话这种方法就不行了吧?

论坛徽章:
0
10 [报告]
发表于 2013-01-16 11:38 |只看该作者
luoyan_xy 发表于 2013-01-15 23:01
调试的话,应该能够根据现场的寄存器判断 ...


如何根据现场的寄存器判断呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP