eventfd与线程间通信

一. evenfd介绍

eventfd是linux新加入的API(自2.26.22), 为用户空间的应用程序提供等待(wait)/通知(notify)机制, 函数eventfd创建的fd可以加入epoll。函数原型:

1. int eventfd_read(int fd, eventfd_t *val);  eventfd_t 是64位

2. int eventfd_write(int fd, eventfd_t val);   此处的val值由调用者指定

3. int eventfd(unsigned int initval, int flags); 

    (1) return: fd, error -1;

    (2) initval: 见下面;

    (3) flags : EFD_CLOEXEC,     没玩过,不解释;

    EFD_NONBLOCK, 设置fd为 非阻塞,省去使用fcntl的麻烦;

    EFD_SEMAPHORE, 如果没设置此标志位,eventfd_read的val值是前面所有evenfd_write写入val值的和

    + initval;如果设置此标志位,evenfd_read读一次val减1直到为0;

二. 用eventfd实现pthread通信

typedef struct tagMSG

{

void *pada;

}MSG_S;

/*


*/

int queue_create(void)

{

return eventfd(0EFD_NONBLOCK | EFD_SEMAPHORE);

}

int queue_read(int iEvFd,  MSG_S *pstMsg)

{

eventfd_t stVal;

return eventfd_read(iEvFd, &stVal);

}

int queue_write(int iEvFd, MSG_S *pstMsg)

{

eventfd_t stVal = 1;


return eventfd_write(iEvFd, stVal);

}



,,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值