首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锁,监视器,互斥锁像SpinWait一样浪费CPU周期吗?

锁,监视器,互斥锁像SpinWait一样浪费CPU周期吗?
EN

Stack Overflow用户
提问于 2020-07-09 13:24:55
回答 1查看 131关注 0票数 0

最近,我开始学习使用C#中的任务并行库进行并行编程,我读到SpinLock会浪费CPU周期,并且会一直旋转直到锁被获取。此外,在比较方法: Thread.Sleep和Thread.SpinUntil时,我发现Thread.sleep会释放调度器,以便调度器可以调度其他线程。这是否也适用于锁、监视器、互斥和互锁?当lock、Monitor、Mutex、Interlocked正在等待进入临界区时,CLR是否允许调度程序调度其他线程?

EN

回答 1

Stack Overflow用户

发布于 2020-07-09 13:57:21

很难理解你的问题。我试着这样做:

  • SpinLock很特别,因为它执行“忙等待”。只在你知道线程会等待很短的时间时使用,例如一些CPU周期。
  • 锁,监视器和互斥不忙等待。这些是线程synchronization.
  • Interlocked完全不锁定的常规和最常用的方式。它用于所谓的“无锁同步”,这很棘手,应该很少使用。

我不知道你说的调度程序是什么意思。线程一直运行,直到它们以某种方式被锁定。只有一个线程可以获得相同的锁。当您创建自己的线程时,它们由操作系统(AFAIK)调度。当您使用线程池时,它们被安排在那里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62807960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档