我想用信号通知工作线程 - 它应该停止等待事件并检查一些全局条件。我在 Linux 上使用 epoll_pwait
,我想在 Mac OS 上执行相同的操作。
但是kqueue(2)
手册说:
EVFILT_SIGNAL ... Only signals sent to the process, not to a particular thread, will trigger the filter.
如何克服这个限制?或者可能还有另一种好方法来通知等待 kevent
的单个线程?
最佳答案
任何 I/O 多路复用 API 的通用方法是:
- 使用 pipeline() 函数打开管道,
- 将其读取端添加到您的 kevent/epoll/无论设置中,
- 向管道的另一端写入一些内容以唤醒事件轮询器。
关于c - 如何通过发送到线程的信号来中断 kevent()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456264/