如何在单个 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 的平台(包括 androidios)上运行。

【问题讨论】:

【参考方案1】:

使用select() 处理所有内容。将 pipe() 用于本地未映射到 fd 的事物。

【讨论】:

以上是关于如何在单个 POSIX 线程中结合两种不同的等待机制?的主要内容,如果未能解决你的问题,请参考以下文章

Linux Qt使用POSIX多线程条件变量互斥锁(量)

POSIX消息队列 - mq_send线程唤醒命令

读者线程没有退出 - Posix Pthreads

linux线程的创建、退出、等待、取消、分离

linux网络编程-posix条件变量(40)

Linux Posix线程条件变量