1

我想用一个信号通知一个工作线程——它应该停止等待事件并检查一些全局条件。我epoll_pwait在 Linux 上使用,我想在 Mac OS 上做同样的事情。

但是kqueue(2)手册说:

EVFILT_SIGNAL ... 只有发送到进程而不是特定线程的信号才会触发过滤器。

如何克服这个限制?或者可能有另一种通知唯一线程等待的好方法kevent

4

1 回答 1

1

任何 I/O 多路复用 API 的通用方法是:

  1. 使用 pipe() 函数打开管道,
  2. 将其读取端添加到您的 kevent/epoll/whatever set,
  3. 在管道的另一端写一些东西来唤醒你的事件轮询器。
于 2013-10-18T19:33:13.837 回答