c - 如何通过发送到线程的信号来中断 kevent()?

标签 c multithreading macos kqueue

我想用信号通知工作线程 - 它应该停止等待事件并检查一些全局条件。我在 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 的通用方法是:

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

关于c - 如何通过发送到线程的信号来中断 kevent()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456264/

相关文章:

c - 为什么 gcc(linux) 中考虑使用 fgets() 以及使用它的替代方法是什么?

c - C 中的宏无法理解

multithreading - Redis 响应异常 : Unknown reply on multi-request

macos - Mac,known_hosts 位置不是默认的?

c - linux下的malloc,隐式限制

c - 从C中的以太网端口接收数据

javascript - Async.js 队列工作程序未完成

c - 为什么我插入队列的数据没有从另一端出来?

macos - 连接期间出错 : . .. http: 服务器在远程主机的任何 docker 命令上向 HTTPS 客户端提供 HTTP 响应

javascript - 从 MongoDB 对象数组中删除元素