'Lock'占用CPU时间吗?

Yan*_*hof 8 .net c# clr

我有6个帖子.其中一个线程进入某个范围并打开'lock',所有其他线程都在等待并想要进入同一范围.

现在,其他线程是否会获得CPU时间?另一个线程是否在线程表中?我知道所有其他线程都处于等待状态 - 但CPU将尝试使线程继续并尝试进入范围(即使范围不可访问)

Cod*_*aos 11

当尝试输入已经采取的锁时,线程首先旋转螺旋锁一段时间,最后暂停并进入等待状态.

它们在旋转时仍会消耗CPU时间,但一旦等待就不再消耗它们.

  • 稍微扩展一下:完成spinwait是因为它比内核转换便宜,因此优化了锁定只是轻微争用的情况. (6认同)
  • @Royi线程一直在检查循环中的外观是否空闲.类似于`while(!lock.TryEnter()){}`烧毁CPU,但避免了内核转换和线程调度的开销.如果锁定很快就会释放,那就太好了,但如果锁定需要更长时间则会很糟糕.这就是为什么`锁定'螺旋锁一会儿,然后等待. (2认同)