gpt4 book ai didi

c++ - 多线程: Signal vs BusyWait(Polling), 线程间条件变量问题

转载 作者:搜寻专家 更新时间:2023-10-31 02:01:13 24 4
gpt4 key购买 nike

我有一个关于线程间通信的一般问题。

现在我正在使用一堆 C++ 线程 (~15)。

他们都在互相使用 BusyWait(Polling) 来获取要处理的数据。但是很难保持较低的 CPU 使用率 && 提供良好的性能并避免进行过多的上下文切换。

所以我正在查看条件变量和信号。我想我理解让线程进入 .Wait(),等待另一个线程调用 .Signal() 的一般概念。

问题 #1)我的问题可能是概念性的,但是如果等待信号的线程在等待时被挂起,它自己将无法执行任何操作。有没有办法让它自己醒来做一些 Action 。

问题 #2) 此外,我的类用于双向传递数据。但是如果中间类正在等待另一个类的信号,它就无法向那个类发送信号。如:

 _________                       _________                       __________
| Class A |---newData Signal--->| Class B |---newData Signal--->| Class C |
| | |(WAITING)|<---newData Signal---| |
--------- --------- ----------

因此,如果 B 类在 .Wait() 上等待来自 C 的 .Signal(),则它无法处理来自 A 的新信号。

有没有可能A && C都发送相同的“newData”信号B来唤醒它?是否可以区分来自 A && C 的信号。

我正在使用 ACE 框架使用 C++ 对此进行编码,并且可能会切换到 Boost。但我想这足够通用,我可以将答案应用于任何操作系统(希望如此)。

谢谢

最佳答案

如果您希望您的父线程在子线程运行时工作,您可以等待带有超时的信号。每次超时到期时,您都会做一些工作并再次等待。

关于c++ - 多线程: Signal vs BusyWait(Polling), 线程间条件变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/950314/

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