eventfd()

作者: Myth52125 | 来源:发表于2017-08-21 00:45 被阅读0次

多线程中通讯

#include <sys/eventfd.h>
int eventfd(unsigned int initval, int flags);

第一个参数是一个值。
第二个参数是模式。(暂时不管他)

#include <sys/eventfd.h>
#include <iostream>
#include <unistd.h>
int main()
{   
    int efd=eventfd(10,0);
    std::cout<<"eventfd result: "<<efd<<std::endl;
    int ret=fork();
    int result;
    if(ret == 0)
    {
        uint64_t  i=20;
        result=write(efd,&i,sizeof(i));
        std::cout<<"child write: "<<result<<std::endl;
    }else{
        sleep(1); 
        uint64_t  i;
        result = read(efd,&i,sizeof(i));
        std::cout<<"parent result: "<<result<<" "<<i<<std::endl;

        result = read(efd,&i,sizeof(i));
        std::cout<<"parent result: "<<result<<" "<<i<<std::endl;
    }
}                                                                               

输出结果为:


该函数可以在父进程和子进程间从当一个wait/notify的作用,而且只能用于唤醒一次,读取以后,值归零。阻塞于read调用。

需要注意的是写入和读取时候值的类型一定要是uint64_t

至于第二个参数,可以设置为O_NONBLOCK,当值为零时,会直接返回失败,并把error置为EINVAL。

相关文章

网友评论

      本文标题:eventfd()

      本文链接:https://www.haomeiwen.com/subject/uypqdxtx.html