C 如何在向线程发送信号时中断kevent()?

C 如何在向线程发送信号时中断kevent()?,c,multithreading,macos,kqueue,C,Multithreading,Macos,Kqueue,我想用一个信号通知一个工作线程——它应该停止等待事件并检查一些全局条件。我在Linux上使用epoll_pwait,我想在Mac OS上也这样做 但是kqueue(2)手册上说: EVFILT_信号。。。只有发送到进程而不是特定线程的信号才会触发过滤器 如何克服这一限制?或者,可能还有另一种很好的方法来通知正在等待kevent的唯一线程。任何I/O多路复用API的通用方法是: 使用pipe()函数打开管道 将其读取端添加到kevent/epoll/任何集合 在管道的另一端写一些东西来唤醒事件轮询

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

但是
kqueue(2)
手册上说:

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


如何克服这一限制?或者,可能还有另一种很好的方法来通知正在等待kevent的唯一线程。

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

  • 使用pipe()函数打开管道
  • 将其读取端添加到kevent/epoll/任何集合
  • 在管道的另一端写一些东西来唤醒事件轮询器

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

  • 使用pipe()函数打开管道
  • 将其读取端添加到kevent/epoll/任何集合
  • 在管道的另一端写一些东西来唤醒事件轮询器