如何在任何事件发生之前唤醒 epoll_wait()?

How to wake up epoll_wait() before any event happened?

我有一个 Connection 对象,表示由 epoll 管理的连接。在事件中,调用 Connection::eventWrite()Connection::eventRead()。连接是持久的(始终存在)。

我需要从另一个线程通过 Connection 发送数据,但不想直接访问对象 Connection,因为我不想解决 [=11] 内部的多线程问题=] 对象(Connectionepoll 线程和 "sending thread" 访问)。相反,我想告诉 epoll-thread: "wake up and do something with Connection" --epoll_wait() 应该 return 并且我的代码会发现 CUSTOM EVENT 发生了(并且,例如,应该调用一些函数,其中将执行对 Connection 的所需访问(将发送数据分配给对象,调用 writeEvent()),然后 epoll_wait()-loop 将继续。

唤醒 epoll_wait() 有哪些解决方案,哪个更快?现在,我想到了创建一个 pipe(由相同的 epoll 处理)并向其写入一个字节 1。还有什么 IPC 可以通过 int "epollable" 文件描述符来表达?

Epoll 可以等待 eventfd。在您的情况下,我会创建一个 eventfd 并触发此事件。我认为,这是最干净的解决方案。