如何用发送到线程的信号中断kevent()?

时间:2013-10-18 18:05:05

标签: c multithreading macos kqueue

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

但是kqueue(2)手册说:

  

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

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

1 个答案:

答案 0 :(得分:0)

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

  1. 使用pipe()函数
  2. 打开管道
  3. 将其读取结束添加到您的kevent / epoll /无论设置,
  4. 将某些内容写入管道的另一端以唤醒您的事件轮询器。