当前位置: 首页 > 知识库问答 >
问题:

当有旋转等待时,为什么要使用旋转锁?

窦弘义
2023-03-14

同时研究。net,我碰到了SpinLock和SpinWait。从表面上看,在我看来,SpinWait将永远是一条出路..当线程实际上必须等待来自线程外部的信号时,为什么还要继续忙碌等待而不放弃CPU呢?在这些空闲等待中花费的周期可能已经被线程使用,该线程可能会发出信号并释放正在忙碌等待的线程。

为什么会存在SpinLock?它与使用while循环的简单忙等待有什么不同?在什么情况下会想使用SpinLock而不是SpinWak?

共有1个答案

魏翰
2023-03-14

通常,自旋锁的实现已经知道如何避免剥夺其他内核(或共享该内核的其他线程)的执行资源。因此,你不必担心与会解除你的障碍的线程斗争。当然,旋转锁的次优实现并不是一件非常有用的事情。(虽然这并不能阻止人们写它们!)

如果您知道等待时间很短,因为锁只在完成琐碎操作时才被持有,那么旋转锁的开销比切换为等待的自适应旋转锁要小一些。一个很好的例子是一个锁,它保护一个竞争激烈的快速集合(例如哈希),并且只有在几乎所有线程都访问该集合的应用程序的集合中插入、删除或找到一个对象时才会被持有。

 类似资料:
  • 问题内容: 我想找出悬停时如何制作 旋转或旋转的图像 。我想知道如何在以下代码上使用 CSS 模仿该功能: 问题答案: 您可以将CSS3过渡与一起使用,以 在悬停时旋转图像 。 旋转图像:

  • 问题内容: 因此,大约一个星期前,我开始学习Java,我正在编写的一个小程序遇到一些问题,这些程序是我为使用swing和oop / java进行训练而编写的。 该程序(到目前为止)具有MainClass和Window类。MainClass创建Window类的实例,该实例创建JFrame并将用户输入保存在field中。 此时,MainClass将输出输出,这是通过getters方法获得的。 问题在于

  • 问题内容: 通过梳理后SVG规范和指南,如这个和这个,我仍然在努力理解究竟是如何链接转换工作。 精选相关报价 当将transform属性应用于SVG元素时,该元素将获得使用中的当前用户坐标系的“副本”。 和: 当转换链接在一起时,最重要的是要意识到,就像HTML元素转换一样,每个转换都将在坐标系被先前的转换转换后应用于坐标系。 和: 例如,如果要对元素应用旋转,然后进行平移,则平移将根据新的坐标系

  • 可以使用类的方法对图像执行旋转操作。以下是这种方法的语法 - 该方法接受以下参数 - src - 表示此操作的源(输入图像)的对象。 dst - 表示此操作的目标(输出图像)的对象。 rotationMatrix - 表示旋转矩阵的对象。 size - 表示输出图像大小的整数类型变量。 示例 以下程序演示如何旋转图像。 假定以下是上述程序中指定的输入图像:。 执行上面示例代码,得到以下结果 -

  • 本文向大家介绍SVG 旋转,包括了SVG 旋转的使用技巧和注意事项,需要的朋友参考一下 示例 将多边形沿原点顺时针旋转90度: 结果等于 旋转中心可以明确给出: 结果等于            

  • 在本章中,我们向您解释了如何使用JOGL旋转对象。 使用GLMatrixFunc接口的glRotatef(float angle, float x, float y, float z)方法,可以沿三个轴中的任意一个旋转对象。 您需要将旋转角度和x,y,z轴作为参数传递给此方法。 以下步骤指导您成功旋转对象 - 最初使用gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2