如何在单个 POSIX 线程中结合两种不同的等待机制?
Posted
技术标签:
【中文标题】如何在单个 POSIX 线程中结合两种不同的等待机制?【英文标题】:How to combine two different waiting mechanisms in a single POSIX thread? 【发布时间】:2017-01-31 21:25:54 【问题描述】:我正在使用 POSIX 线程开发应用程序。
有问题的线程正在接收传入数据。大多数时候它都在睡觉,等待着什么事情发生。
但是这里有两个问题:
-
在某些情况下,线程必须完全停止;并且通常一个简单的 POSIX 条件信号就足够了。
线程正在使用
select()
等待来自 TCP 套接字的事件和数据,同时也在等待来自虚拟“端口”的事件,这可能不支持select()
(例如某些特定的蓝牙/USB 连接等)。我将为这些端口实现一个通知机制——同样,一个简单的 POSIX 条件信号就足够了。
现在的问题是 - 如何在一个线程的单个运行循环中结合对 select()
和 pthread_cond_wait()
的等待以在所有这些事件上唤醒它?
端口数(TCP 和“虚拟”)预计会很低,低于 5。
该解决方案应该是可靠的,并且可以在 Linux 和类似 BSD 的平台(包括 android 和 ios)上运行。
【问题讨论】:
【参考方案1】:使用select()
处理所有内容。将 pipe() 用于本地未映射到 fd
的事物。
【讨论】:
以上是关于如何在单个 POSIX 线程中结合两种不同的等待机制?的主要内容,如果未能解决你的问题,请参考以下文章