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

时间:2016-11-01 14:14:28

标签: c++ multithreading epoll

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

我需要从另一个线程通过Connection发送数据,但不想直接访问对象Connection,因为我不想解决Connection中的多线程问题object(Connection是从epoll - 线程和“发送线程”访问的。相反,我想告诉epoll - 主题:“唤醒并使用Connection执行某些操作” - epoll_wait()应该返回,我的代码会发现CUSTOM EVENT是发生(例如,应该调用某个函数,其中将执行对Connection的所需访问(将数据发送到对象,调用writeEvent()),然后epoll_wait() - 循环将继续。

唤醒epoll_wait()以及哪一种更快会有哪些解决方案?现在,我想出了一个pipe(由同一个epoll处理)并向其写一个字节1。还有哪些IPC可以通过int“epollable”文件描述符来表达?

1 个答案:

答案 0 :(得分:1)

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