如何在一个POSIX线程中组合两种不同的等待机制?

时间:2017-01-31 21:25:55

标签: c++ multithreading sockets

我正在使用POSIX线程开发应用程序。

有问题的线程正在接收传入数据。大多数时候它正在睡觉并等待某些事情发生。

但这里有两个问题:

  1. 在某些情况下,线程必须完全停止;通常一个简单的POSIX条件信号应该足够好用于此目的。
  2. 线程正在等待来自TCP套接字的事件和数据使用select()并等待来自虚拟"端口"的事件,这可能不支持select()(例如一些特定的蓝牙/ USB连接等)。我将为这些端口实现一个通知机制 - 同样,一个简单的POSIX条件信号就足够了。
  3. 现在的问题是 - 如何在一个线程的单个runloop中同时等待select()pthread_cond_wait()来唤醒所有这些事件? < / p>

    端口数量(TCP和&#34;虚拟&#34;)预计低,低于5。

    该解决方案应该可靠,适用于Linux和类似BSD的平台(包括Android和iOS)。

1 个答案:

答案 0 :(得分:2)

对所有内容使用select()。对于未原生地映射到fd的内容,请使用pipe()