免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: shi_wen_qiang
打印 上一主题 下一主题

不同的自旋锁之间会有冲突吗? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-07-06 09:01 |只看该作者
既然在编译时,编译器能自动根据实际使用中CPU的个数来对这个函数(或宏定义)调节,那么我们写代码的时候,加上它肯定是不会有问题的?
回复 10# shi_wen_qiang

我不觉得编译器需要特别处理,因为在单cpu上面根本不会发生的事情,spin_lock_irqsave = local_irq_save,spin_lock,所以,单cpu后面的不会执行,也就无所谓。。。
在使用 spin_lock_irqsave 关闭中断后,如果在这么一点时间内,恰好来了一个中断被屏蔽了,等到 spin_unlock_irqrestore 的时候,这个中断应该不会丢失吧?

关中断只是IF置为为0,中断还是会传给cpu,只是cpu不响应,而且中断也有一个挽回机制,但是具体的我不懂|->
spin_lock_irqsave( A ) ;
      .....
              spin_lock_irqsave( B ) ;
              ...
              spin_unlock_irqrestore( B ) ;
      ....
      spin_unlock_irqrestore( A ) ;

      ================
      我自己的理解:
            如果在多 CPU 的环境中,这样写法是没有问题的,因为A,B代表两个不同的资源。

    这个必然有问题,只要是两把锁都会产生死锁:如果另外一个cpu:
spin_lock_irqsave(B),spin_lock_irqsave(A),你只是关闭本地cpu中断,其他cpu还是可以执行中断的。。。
如果按照上面大家讨论的结论:自旋锁只对多CPU时才是有用的,那么对于单 CPU 时,有没有那种普通的锁?大家也知道,在中断处理程序中,是不能使用信号量来对资源进行控制的,应该使用锁,那对于单CPU,在中断处理程序中,应该使用什么样的锁?

关闭中断不够?
问题:通过上面粉色的字,可以看出,只要使用“锁”和“中断”,那么就会自动禁止内核抢占,这里的锁指的也是“自旋锁”吧?

这个应该是翻译的问题,自旋锁就是保护多cpu同步的,不要想多了。

论坛徽章:
0
12 [报告]
发表于 2010-07-08 06:45 |只看该作者
非常感谢大家的细致的回复,tks.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP