gpt4 book ai didi

c++ - 另一种检查 std::queue 事件的方法?

转载 作者:太空狗 更新时间:2023-10-29 20:05:13 27 4
gpt4 key购买 nike

好吧,我正在尝试处理某种队列。我有一个 IO 线程,它专用于从 std::queue 中弹出数据,但问题是我正在使用 Sleep() 以防止 100 % cpu 常量检查。 当然还有将项目添加到 std::queue 的其他线程。

我如何创建一个事件,以便线程处于休眠状态并且在 std::queue 不为空时启动?

IO线程

Sleep(100);
while (!myqueue.empty())
{
//process data FIFO
myqueue.pop(); //pop out and continue
}

非常感谢,谢谢!哦,这是针对 c++11 或 c++03 的,这并不重要 - 在 Windows 上。

最佳答案

std::queue 与线程完全无关。完全没有。它的 .empty() 成员不是线程安全的(只能重入)!这同样适用于它的所有其他成员。因此,多个线程可以随心所欲地使用不同的队列,但一次只能有一个线程可以对每个实例执行任何操作。

C++11 或 C++03 很重要因为 C++11 定义了线程同步原语,而 C++03 没有,你必须使用 OS API。 p>

在 C++11 中,您可能会对 std::condition_variable 感兴趣.

在 C++03 中,您可能会对 Boost.Thread 感兴趣(主要与 C++11 兼容)EventsSemaphores .

无论哪种情况,std::queue::push()std::queue::pop() 本身必须受互斥保护。 std::condition_variable 甚至强制您使用一个 (std::mutex),在 Windows API 中您将使用 Critical Section .

在 Windows 上,C++11 类仅在 Visual Studio 2012 和 Windows 8 中可用。对于较旧的编译器,使用 Boost(优点是可移植)或 native API。

关于c++ - 另一种检查 std::queue 事件的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686104/

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