Linux,C ++,使用poll / select等待事件(没有阻塞正在执行的线程)

时间:2015-02-24 07:20:05

标签: c++ linux multithreading linux-kernel

用例

  • 单线程应用程序
  • 使用 poll
  • 的非阻止Async-IO
  • 具有超时期限的可等待对象(例如,互斥锁)

手头的问题

我不想创建一个专门的线程来等待超时,因此,我想使用 poll 等待〜中的等待对象超时〜异步〜时尚。

是否可以使用 poll 通知互用等待超时?

主线程伪代码

  • 现有逻辑
    1. 使用 poll
    2. 等待多个FD
    3. 为每个~ready~FD,处理IO
    4. 转到#1
  • 所需的逻辑
    1. 使用 poll
    2. 等待多个FD 和Mutexes
    3. 为每个~ready~FD,处理IO
    4. 对于每个timedout互斥进程超时(例如,执行已注册的回调)
    5. 对于每个发出信号的互斥进程等待完成
    6. 转到#1

1 个答案:

答案 0 :(得分:2)

Pthread互斥锁没有文件句柄。

eventfd之上实现您自己的互斥锁,然后您可以使用poll()等待它。