ILD

poll event using eventfd
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2024-5-13 站点:Inside Linux Development

在主线程等待子线程的事件发生,可以使用pthread_cond_wait(),缺点是,如果主线程使用poll做多路复用,那么pthread_cond_wait()无法融合进去。


一种解决方案是创建一个匿名管道,然后子线程写数据,主线程读数据。这种方案确实可行。缺点是,唤醒多少次,就要收多少数据,另外就是半双工,涉及两个文件描述符。


eventfd就是为了解决上述问题出现的,而且eventfd是linux中出现的时间很早。


       #include <sys/eventfd.h>

       int eventfd(unsigned int initval, int flags);


使用上述接口创建一个eventfd的文件描述符。然后可以像正常的文件一样进行read/write/poll。eventfd内部维护一个64位的计数,根据flags的设定,read可以一次消耗所有的计数,或者消耗一个计数。



Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.