问题标签 [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.
c - 与 pthread 调用、互斥锁和忙等待共享的 2 个边界缓冲区
我通常是 C 新手,所以我有很多语法错误和引用问题。我已经编写了 prodcons.c,这是一个 Struct,它将创建一个大小为 50 的有界缓冲区和一些辅助变量。在 main 中,我创建了这个数据结构的变量并对其进行初始化。我试图将任意数量的参数(IE {1..1000})说成数千个并将它们推入缓冲区,同时另一个 C 文件 producer.c 正试图从同一个缓冲区中弹出我通过线程调用共享给它。PUSH 和 POP 都有一个互斥锁来同时停止对关键部分的任何更改。然后,生产者线程将初始化另一个数据结构,从其共享缓冲区中的 main 获取每个参数的主要因素,与线程中的 Consumer.c 函数调用共享一个新的初始化数据结构。消费者只需打印数字及其主要因素。我相信我的所有文件中都必须有#include prodcons.h 才能使用它的功能,但如果我错了,请纠正我。另外,我正在尝试创建 BUSY WAITNG,main 和 producer 每次都尝试使用 while 循环到达关键部分,调用 POP 和 PUSH,但这很可能是错误的。请帮助,建议,语法。任何事物。
老实说,我只是尝试编译代码,但是我的引用和指针以及 C 中共享文件的任何正确方法以及对数据结构的指针调用都已关闭。我想我只是需要很多更正。比如当使用结构指针时,我是使用 pc->function() 还是 pc.function()?这些小的语法错误让我陷入了困境。我正在通过 consumer.h 和 consumer.c 分享所有内容,因为找出主要和生产者中的问题,然后我可以找出消费者。
我希望输出每个数字及其素数。
c++ - c++循环不断检查变量的速度有多快
我正在使用繁忙的循环来检查条件何时为真并拍照,但是当条件为真时以及当我的循环检测到它时,我需要有少于 10 毫秒的延迟。这个循环可行吗?
这是在缓慢的树莓派零上运行的。
我希望采用的完整代码: https ://github.com/WiringPi/WiringPi/blob/master/examples/isr.c
c++ - 如何在 Windows 上正确忙等待?
我需要实现忙等待。
如果您认为我不应该这样做,请提供一个低延迟替代方案,而不是忙于等待ID3D11DeviceContext::GetData返回S_OK
,这适用于 Windows 7 SP1。
我发现KeStallExecutionProcessor API 正是我需要的。该 API 是否暴露于用户模式?如果没有,它是如何实施的?我知道如何调用_mm_pause
内在函数,但我不知道如何以足够的精度测量时间:QueryPerformanceCounter
对于忙碌的等待来说太贵了,GetTickCount
便宜但没有我需要的分辨率,并且_rdtsc
可能随 CPU 频率而扩展。
更新#1:我可以很好地停止CPU,例如,for ( int i = 0; i < 1000; i++ ) _mm_pause();
这就是我现在正在做的一段时间,然后开始调用Sleep( 1 )
外部循环。
更新 #2:仅在 Windows 10 1703 “Creators Update”中实现了正确等待 GPU,请参阅ID3D11Device5::CreateFence和ID3D11Fence::SetEventOnCompletion API。在 1703 之前的 Windows 7、8、8.1 和 10 中,忙碌等待是获得通知的唯一方式。我需要尽快得到通知,每一毫秒都很重要。我只有 16ms 的时间来渲染一帧,一些用户有 144Hz 的显示器,在他们的 PC 上只有 7ms。
multithreading - Golang 睡眠线程而不是忙于等待
我正在编写Leslie Lamport's Bakery algorithm的 Go 实现,它有忙自旋等待来处理最大数量的线程。
我正在编写一个 go 函数,除非满足特殊条件,否则该函数不应继续执行。到目前为止,我的代码如下所示:
有没有更有效的方法来停止处理这个线程?
c - pthread 是否在忙于内部等待?
我想知道打电话时pthreads
是否忙于内部等待pthread_cond_timedwait()
?
我正在分析一个多线程程序,需要知道调用上述函数时线程是否可能阻塞资源。
平台:Intel x86_64,CentOS 7.5.1804 和 GCC 5.3.0
c# - 从 C# Stream 读取而无需忙于等待
我需要从 C# 中的 Stream 读取内容。我不知道它会是哪种流。让我们假设它是网络流并且网络非常慢。所以我不能立即读取所有字节。我知道流中的 4 个字节是整数,这个 int 定义了我们需要从流中获取的内容长度。如何在不忙于等待(循环)的情况下做到这一点?
python - 如何在不忙于等待的情况下“暂停”python脚本直到某些“动作”发生?
详细地说,我需要脚本来检查系统是否连接到 wifi(使用无限忙等待循环),一旦连接,脚本就会继续执行它接下来想做的任何事情。
这可行,但正如您所看到的,它浪费了 CPU 时间(连接到 wifi 通常需要大约 5-8 秒).. 现在,可能会添加一个计时器以仅定期检查,但有没有办法只是“暂停” ' 脚本和 'signal'/'resume' 直到 wifi 连接
PS:为了检查wifi是否连接,我正在使用
主机名 -I
在 Python 脚本中,如果连接则返回一个值,否则返回 null。
c - 主要在不同的信号上做不同的任务
所以我正在做一个项目,我需要让我的 main 在收到 a 时执行不同的任务,比如说,SIGINT
当它收到一个SIGTSTP
. 其余时间, main 不需要做任何事情。到目前为止,我提出的代码对所有信号都有一个信号处理函数,并且基于signo
,它为该信号设置了适当的标志。Main 在一个while(1)
循环中运行(通过一些 sleep 调用来避免忙于等待)并检查这些标志。这是代码:
现在据我测试,它似乎工作正常。我主要感兴趣的是捕捉最新的,比如说,SIGINT
在特定时间发生的突发事件,所以如果丢失一些也没关系。
我的方法看起来不错,或者当我继续我的项目时,我会对奇怪的行为感到惊讶吗?
另外,对于 main 需要做的等待,还有什么更好的办法吗?
任何帮助,将不胜感激!
multithreading - 为什么自旋锁会成为多线程程序中的性能问题?
我知道自旋锁是什么,并且他们使用忙等待。但是为什么它会成为多核处理器上多线程程序的性能问题呢?
可以做些什么呢?
c - 等待信号时避免忙等待
我正在尝试编写一个可以轻松移植到任何 MCU 的代码。该 MCU 将充当主机并与另一个音频编解码器芯片通信。与芯片通信时,主机 MCU 将向芯片写入请求,并等待中断线变为高电平,然后读取芯片的响应。
目前,我使用 Raspberry Pi 作为主机,因此我可以输入中断线poll
的条目。sysfs
如何在可能没有poll
方法的原始系统中实现这一点。我在想我可以在中断 ISR 中更新一个全局变量并反复检查这个全局变量。这就是我想要避免的问题。主程序循环本身可能会从 Timer 中断处理程序之一调用,而忙等待可能不是一个好的选择。
有任何想法吗?