关于同一个线程连续两次调用spin_lock函数

mathe 2010-12-01 03:04:47
为了测试spinlock的使用,我写了了测试程序,如:
spinlock_t lck;
spinlock_int(&lck);
spin_lock(&lck);
r=spin_trylock(&lck);
本来我认为这时spin_trylock应该返回失败的值,但是我运行的结果确实返回0,感觉有点奇怪,不知道有没有大侠能够帮忙解释一下。我试着查看过spinlock的源代码,但是过于复杂,没有弄明白
...全文
551 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzz24 2011-09-20
  • 打赏
  • 举报
回复
0就是失败吧^^
mathe 2010-12-25
  • 打赏
  • 举报
回复
楼上看题不认真。
我查看的是返回值,而不是判断死锁
leeyiqun 2010-12-22
  • 打赏
  • 举报
回复
spin_trylock 判断如果锁已经被获得,则立即返回,所以这样写不会导致死锁,但是你如果把顺序反过来,
spinlock_t lck;
spinlock_int(&lck);
r=spin_trylock(&lck);
spin_lock(&lck);

这样就会导致死锁了。
少逸 2010-12-01
  • 打赏
  • 举报
回复
同问~~~抢占如何打开??在哪里查看抢占状态??
mathe 2010-12-01
  • 打赏
  • 举报
回复
是多核的机器。如何判断是否内核打开了抢占呢?
是不是在没有打开抢占的情况下,同一个线程可以多次lock一个自旋锁?
duanius 2010-12-01
  • 打赏
  • 举报
回复
spinlock的实现与单核多核 内核是否打开抢占有关 所以要根据你的实际情况分析

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧