Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1355165
  • 博文数量: 1334
  • 博客积分: 645
  • 博客等级: 上士
  • 技术积分: 5762
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-25 16:56
文章分类

全部博文(1334)

文章存档

2014年(108)

2013年(1059)

2012年(169)

分类: C/C++

2013-06-05 14:44:18

bufferevent 在buffer数据一层封装底层socket.用户可直接针对buffer操作,带来很大方便性。但是在多线程使用时候,线程之间通讯不是很直接,是不能直接用bufferevent_enable和bufferevent_disable进行通讯的。libevent 主要是限制在本线程内操作,比如bufferevent_enable和bufferevent_disable。而bufferevent 中 主要是通过 bufferevent_disable和bufferevent_enable来控制事件回调的。 而要做到线程之间通讯,一般采用管道方式。思路如下:


一个主线程A,负责socket I/O、信号、超时分发;线程池B,作为工作线程。
A线程读到数据后,压入队列,然后发送信号给工作线程(sem_post);工作线程处理结果后,调用buffereven_write向bufferevent缓存内写入数据,然后写管道通知主线程;主线程回调管道读函数,在读函数内设置bufferevent_enable(bev,EV_WRIATE). 这样 就做到了 在同一线程内。

 当然也可借鉴网上资料,在每个线程内都采用libevent方式,然后通过管道通讯。本思路中是通过信号灯方式来通知工作线程。
阅读(1468) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~