Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7263408
  • 博文数量: 512
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6857
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(512)

文章存档

2024年(2)

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: C/C++

2010-10-25 17:55:43

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方式,然后通过管道通讯。本思路中是通过信号灯方式来通知工作线程。
阅读(6634) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~