gpt4 book ai didi

c++ - 奇怪的行为,cout 使程序运行

转载 作者:行者123 更新时间:2023-11-30 00:54:11 25 4
gpt4 key购买 nike

我在 C++ 中有两个线程。一个称为警报线程的线程运行函数 raiseAlarm(),另一个称为打印线程的线程运行称为 printMetrics 的函数。在固定的时间间隔内,raiseAlarm 将原子变量设置为 true。当变量为 true 时,根据此原子变量的值旋转的 printMetrics 线程会打印一些数据。当我运行这个应用程序时,没有任何反应。但是,如果我在 raiseAlarm 中的任何位置放置一个 cout,一切都会正常进行。为什么?

void Client::raiseAlarm()
{
bool no = false;
while(!stop.load(std::memory_order_acquire))
{
//cout << "about to sleep\n";
this_thread::sleep_for(std::chrono::seconds(captureInterval));
while(!alarm.compare_exchange_weak(no, true, std::memory_order_acq_rel))
{
no = false;
}
}
}

void Client::printMetrics()
{
bool yes = true;
while(!stop.load(std::memory_order_acquire))
{
while(!alarm.compare_exchange_weak(yes, false, std::memory_order_acq_rel) )
{
yes = true;
}

cout << "Msgs Rcvd: " << metrics.rcv_total.load(std::memory_order_acquire);
cout << "Msgs Sent: " << metrics.snd_total.load(std::memory_order_acquire);
cout << "Min latency: " << metrics.min_latency.load(std::memory_order_acquire);
cout << "Max latency: " << metrics.max_latency.load(std::memory_order_acquire);
metrics.reset();
}

}

最佳答案

只是一个建议,因为我对 C++ 中的并发不太了解,但请确保您不要忘记刷新输出流。要么贴个cout << flush;毕竟你的cout行或添加 << endl到每一个(这将自动刷新您的流)。

关于c++ - 奇怪的行为,cout 使程序运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14656522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com