自旋锁 获取多久为合适 ?这个时间又怎么确定呢 ?

CCDDzclxy 2012-08-23 05:06:31
<<Windows驱动开发技术详解>>中有一段:

如果自旋锁已经被锁住,这时有程序申请“获取这个自旋锁”,程序则处于自旋状态。所谓自旋状态,就是不停的询问是否可以“获取”自旋锁。
......
而自旋锁原理则不同,它不会切换到别的线程,而是一直让这个线程“自旋”。因此,对自旋锁占用时间不宜过长,否则会导致申请自旋锁的其他线程处于自旋,折回浪费CPU宝贵的时间。


那我想问的问题是 : 1、自旋锁占用多久算比较合适?(即 占用时间 <= ??ms 算比较合适 ??)

2、假设我有一个int数组需要遍历,如果数组里有几百个项需要遍历,那时间会不会算多??int数组大到多少时就不适合用 自旋锁 来做同步了??

上面两个问题,请解答下。

总得来说,就是 自旋锁获取期间,执行多少条汇编指令算合适 ??那这个跟 具体CPU能力也有关系吧 ??
那我该如何拿捏这个度呢 ?像遍历这种操作是不适合放在自旋锁里面??
这几个问题也请指教下...
...全文
438 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjtea 2012-08-27
  • 打赏
  • 举报
回复
由于进入自旋锁后,中断通常被禁止;如果有紧急的中断希望50微妙内能够响应,那么,自旋锁锁定的时间就不应该超过50微妙。

如果,整个系统中就没有特别紧急的事情,那么自旋锁的时间就可以长一点。可见,自旋锁的时间长短是因系统而定的,没有固定的时间限制。

如果一段程序非常短,执行时间非常快,那么与信号量相比,采用自旋锁的好处是:不会被中断或调度打断,而来回进出一次浪费时间。
CCDDzclxy 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
(1)比如你上面说的访问数组,要保护数组只能被单独访问,对比一下自旋锁、信号量、事件、Mutex,由于访问数组的时间很短,所以有自旋锁最合适。[/Quote]
那就比如数据,当数组多大时,遍历就不适合用 自旋锁 了?
xgbing 2012-08-24
  • 打赏
  • 举报
回复
(1)比如你上面说的访问数组,要保护数组只能被单独访问,对比一下自旋锁、信号量、事件、Mutex,由于访问数组的时间很短,所以有自旋锁最合适。
(2)如要独占写数据到一个文件,使用Mutex最合适。
(3)如要等待一个IO完成,那么使用事件或信号量。
CCDDzclxy 2012-08-24
  • 打赏
  • 举报
回复
先感谢楼上两位的解答。

概念还是比较模糊..... 啊能举个具体的例子来形象的解释下??
xgbing 2012-08-23
  • 打赏
  • 举报
回复
1.微秒以下为好,这个没有具体的标准,越短越好。具体使用哪一个,你可以根据情况对比一下自旋锁、信号量、事件、Mutex,更适合使用哪一个。
2.几百个项的数组访问适合使用。
bjtea 2012-08-23
  • 打赏
  • 举报
回复
进入自旋锁后,通常中断已经被关闭,调度也已经被禁止。单一CPU下,CPU只专心处理一件事情,对其它紧急事件也置之不理。仅在多CPU情况下,其它CPU还可处理别的事件。
可见,自旋锁锁定的时间应当越短越好,毫秒级的时间太长了,微妙级为宜。时间较长时,除非很必须的情况下,不应该使用,以免影响CPU对其它事件的响应速度。

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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