- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个关于线程间通信的一般问题。
现在我正在使用一堆 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/
我正在编写一个应用程序,将输入从一个设备转换为另一个设备 - 比如说一种头部跟踪格式到另一种格式,主要用于为游戏中多种类型的头部跟踪提供支持。 大多数情况下,程序的输入是通过轮询共享内存来传递的。然而
我有一个关于线程间通信的一般问题。 现在我正在使用一堆 C++ 线程 (~15)。 他们都在互相使用 BusyWait(Polling) 来获取要处理的数据。但是很难保持较低的 CPU 使用率 &&
我试图从一个 fork 进程的 STDOUT 中读取。但是,如果我在无限的 for 循环 中从管道读取数据,即使没有数据通过管道,它也会忙于等待(如果我错了请纠正我),我猜必须是比使用 sleep 更
我是一名优秀的程序员,十分优秀!