C语言 如何中断 kevent() 并将信号发送到线程



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

kqueue(2)手册上说:

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

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

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

  1. 使用 pipe() 函数打开管道,
  2. 将其读取结束添加到您的 kevent/epoll/任何集合中,
  3. 在管道的另一端写入一些内容以唤醒事件轮询器。

最新更新