ein*_*ica 5 c++ linux multithreading synchronization c++11
由于某些愚蠢的原因,我的(GNU/Linux)机器上有一个硬件只能通过将值写入内存来传达特定的事件。假设通过某种魔法,硬件写入的内存区域对于我正在运行的进程是可见的。现在,我想让该进程中的一个线程跟踪该值,并在它发生更改后尽快执行一些代码。然而,对我来说,更重要的是线程不浪费 CPU 时间,而不是绝对最小化响应延迟。所以 - 无需忙于等待不稳定的...
我应该如何最好地做到这一点(使用现代 C++)?
笔记:
因此,天真的做法是不忙着睡觉,例如:
volatile int32_t* special_location = get_special_location();
auto polling_interval_in_usec = perform_tradeoff_between_accuracy_and_cpu_load();
auto polling_interval = std::chrono::microseconds(polling_interval_in_usec);
while(should_continue_polling()) {
if (*special_location == HardwareIsDone) {
do_stuff();
return;
}
std::this_thread::sleep_for(polling_interval);
}
Run Code Online (Sandbox Code Playgroud)