【发布时间】:2017-09-29 15:31:00
【问题描述】:
我有一个多线程系统,其中一个主线程必须在阻塞状态下等待以下 4 个事件之一的发生:
- 进程间信号量 (sem_wait())
- pthread 条件 (pthread_cond_wait())
- 来自套接字的recv()
- 超时到期
理想情况下,我想要一种在发生上述任何情况时解除阻塞主线程的机制,例如带有适当超时参数的 ppoll() 。由于对 CPU 使用率的影响,非阻塞和轮询是不可能的,而由于延迟增加,不同的事件阻塞不同的线程并不理想(一个线程从一个事件中解除阻塞最终应该唤醒主一)。
如果有帮助,代码将几乎完全在 Linux 下使用 gcc 工具链编译,但如果可能的话,一些可移植性会很好。
提前感谢您的任何建议
【问题讨论】:
-
你能编辑后台线程的代码吗?也就是说,您可以在后台线程中修改信号量和条件变量的任何位置添加更多代码吗?
-
@bnaecker 我可以访问线程内同步代码(本质上是通知 pthread 条件变量的线程),但不能访问进程间信号量,因为 sem_post() 在这个信号量上的进程我正在等待的是第 3 方,不在我的控制范围内。
标签: linux multithreading sockets posix semaphore