问题标签 [busy-waiting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
11610 浏览

spinlock - 自旋锁 vs 忙等待

请解释为什么Busy Waiting通常不受欢迎,而Spinning通常被认为是可以的。据我所知,它们都无限循环,直到满足某些条件。

0 投票
0 回答
287 浏览

java - 卡夫卡高级消费者消费者迭代器线程阻塞?

我已经从组中实现了一个 Kafka 高级消费者:'org.apache.kafka',名称:'kafka_2.10',版本:Java 中的'0.9.0.1'。

我注意到 consumerIterator 是线程阻塞的。它的 hasNext() 不会返回,直到有新的 msg 来消费。我使用 consumer.timeout.ms 来克服这个问题。但有时我需要每当用户关闭时,消费者应该关闭。由于线程正忙于在 consumerIterator 中等待,我将无法关闭。

有没有办法克服 Kafka 消费者中的线程阻塞?我可以动态更改 kafka 属性值吗?

0 投票
3 回答
306 浏览

embedded - 紧密的循环会破坏微控制器闪存的单元吗?

众所周知,Flash 存储器的写入耐久性有限,因此读取也可能有上限,例如此 Flash 耐久性测试的结论(第 3 点)中提到的。

在微控制器上,代码通常存储在 Flash 中,并通过直接从 Flash 单元中获取代码字来执行。
(至少这在 8 位微控制器上最常见,一些 32 位微控制器可能有一些小缓冲区)。

根据特定的代码,可能会非常频繁地访问某个位置,例如如果在主执行路径上存在一些繁忙的循环,例如等待中断
(例如来自计时器,将执行同步到固定间隔)。

这可以平均每秒对单个 Flash 单元产生 100K 甚至更多(读取)访问(取决于时钟和特定代码)。

这样的代码真的会破坏它下面的 Flash 单元吗?

(在为微控制器设计代码时,是否有必要关注这个特殊问题?例如要运行多年的系统的一部分?当然 Flash 可以通过 CRC 定期验证,但这并不妨碍如果发生系统故障,只是故障更有可能以受控方式发生)

0 投票
1 回答
877 浏览

c - 在 C 语言中,我们可以在不忙于等待的情况下从管道中读取,可能是使用回调或其他方式吗?

我试图从分叉进程的 STDOUT 中读取。但是,如果我正在无限地从管道中读取,for loop即使没有数据通过管道,它也会忙于等待(如果我错了,请纠正我),我想必须有更好的方法来做如果它是短时间间隔使用sleep,可能是回调,我不确定。以下是我尝试过的代码片段。

有人可以建议一个更好的方法,而不是忙着等待,可以用来从管道中读取数据吗?由于我是初学者C,因此对代码片段的任何引用都值得赞赏。

问候。

0 投票
1 回答
278 浏览

java - 线程在某些情况下忙于等待,而在其他情况下则没有

我遇到了一个非常奇怪的问题,Java 线程忙于等待。

我有一个线程忙于等待其他线程的静态变量的状态。假设忙等待的线程正在等待另一个线程的静态 int 变量达到某个值

如果我使用上面的代码,线程将被卡住,等待并且不会跳出 while 循环,即使static int countInt达到 5。

但是,如果我使用这个其他代码,那么线程确实会脱离忙等待循环。有时,countInt一到5,其他时候稍等片刻。但它发生了。对于我的特定示例,我将其用作“无意义的工作”

print("busy waiting...",1000) // wasting time doing meaningless work

我定义printsynchronzied static void print(String s, int n)打印字符串s然后休眠n几毫秒。

是什么赋予了?为什么线程忙于等待第一个代码,而不是另一个?所有线程都有相同的优先级,所以它不能是一个优先级问题。

0 投票
1 回答
53 浏览

c# - 在代码隐藏中忙于等待 - dotnetnuke

我正在为 DNN 网站编写一个小模块。我需要<div>每隔 n 秒使用代码隐藏中的列表内容更新一次,一次一个列表项。我<asp:UpdatePanel>在网页上设置了一个 5 秒<asp:Timer>。在我的OnTick()我将一个全局变量设置flag为 1。然后我忙于等待一个 while 循环,每次flag从 0 更改为 1,我都会更新<div>的内容:

该页面最终会挂起一段时间,最终 DNN 会引发超时错误。我试图理解为什么使用这样的全局变量flag不起作用。非常感谢。

PS<div>如果我摆脱了 while 循环并使用DateTime.Now.

0 投票
2 回答
3210 浏览

c++ - 实现条件变量来解决多线程忙等待

我的程序通过使用空闲工作线程将多行文本打印到控制台。然而,问题是工作人员在打印文本之前没有等待先前的工作人员完成,这导致文本被插入到另一个工作线程的文本中,如下图所示:

在此处输入图像描述

我需要通过使用 std::condition_variable 来解决这个问题 - 称为忙等待问题。我尝试根据在此链接上找到的示例在下面的代码中实现 condition_variable ,并且由于我对 C++ 的一般知识有限,以下 stackoverflow 问题对我有所帮助,但还不够。所以最后我只是把所有的东西都评论出来了,我现在很茫然。

0 投票
3 回答
1268 浏览

mutex - 多核上的信号量 wait()

我目前正在研究信号量和互斥是如何实际工作的,并遇到了以下问题。

假设我们在 CPU 上有两个内核。我们有两个进程,每个核心上运行一个。我们现在在两个核心上调用 wait() ,因为我们希望进入临界区:

如果两个内核并行执行代码,并且初始信号量值为 1,则两个内核都读取 while 循环语句,结果为false(自s = 1)。这意味着,两者几乎同时递减信号量,结果为s = -1. 现在,两个进程同时进入它们的临界区,这在互斥方面是不可能的。

我怎么了?

感谢您的澄清。

0 投票
2 回答
557 浏览

python - 使用 queue.get() 阻塞 Python 没有异常或忙于等待

我有以下线程,队列 q 大部分时间都是空的:

如果设置了退出标志,它不可能立即退出,因为它可能当前阻塞在

如果我设置超时

我经常会引发 Empty 异常,因为队列通常是空的,使用的资源比我想要的多。

如果我忙着等待

然后我忙着等待,而不是使用 Queue.get() 的阻塞功能,这看起来很丑陋。好像我在这里错过了这个问题的优雅解决方案?有没有或者我应该只使用忙等待解决方案?

0 投票
1 回答
298 浏览

java - 如何在不忙于等待的情况下暂停线程直到条件变为真?

如何在不忙于等待的情况下暂停线程直到条件变为真?例如,假设我正在检查是否

playerOne.isWalking()

这将是真的,我想在它成为真的时运行一些代码。再次假设 playerOne 是 Player 类的一个实例,它具有函数 isWalking()。我无权访问使 isWalking() 成为真的原因。因此,每次我想检查 isWalking() 是否为真时,我都必须从 player 实例显式调用该方法。

我已经尝试在同步块中使用等待/通知,但这永远不会起作用,因为我必须手动通知线程在 isWalking() 变为真时唤醒,我不知道它何时变为真。

我尝试使用观察者模式使 Player 成为 observable 的子类,这样我就可以在 isWalking() 变为 true 时调用 update 方法,但我不知道什么时候会发生这种情况。

我什至尝试过使用属性,但这也行不通。

这甚至可以在不忙于等待的情况下进行检查吗?不断地轮询和调用那个函数,看是否为真,如果为真,则执行代码。

这是我提出的涉及忙等待的糟糕解决方案:

忙等待解决方案