我有一个关于线程间通信的一般问题。
现在我正在使用一堆 C++ 线程(~15)。
他们都在使用 BusyWait(轮询)彼此来获取要处理的数据。但是很难保持较低的 CPU 使用率 && 提供良好的性能并避免进行过多的上下文切换。
所以我正在查看条件变量和信号。我想我理解线程进入 .Wait() 的一般概念,等待另一个线程调用 .Signal()。
问题#1)我的问题可能是概念性的,但是如果等待信号的线程在等待时被挂起,它自己就无法执行任何操作。反正有没有让它自己醒来执行一些动作。
问题 #2)此外,我的课程用于双向传递数据。但是如果中间类正在等待另一个类的信号,它就无法向那个类发送信号。如:
_________ _________ __________
| Class A |---newData Signal--->| Class B |---newData Signal--->| Class C |
| | |(WAITING)|<---newData Signal---| |
--------- --------- ----------
因此,如果 B 类为来自 C 的 .Signal() 开启 .Wait(),则它无法处理来自 A 的新信号。
A && C 是否有可能发送相同的“newData”信号 B 来唤醒它?是否有可能将信号与 A && C 区分开来。
我正在使用 C++ 使用 ACE 框架进行编码,并且可能会切换到 Boost。但我想这足够通用,我可以将答案应用于任何操作系统(希望如此)。
谢谢