
c
文章平均质量分 74
huanzai2
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程特定数据
在多线程程序里,我们有可能经常遇到因为函数使用的静态变量无法为不同的线程保存各自的值的问题。有很多办法可以解决,本文就来看一下通过线程特定数据来解决这样的问题。每个系统支持有限的线程特定数据元素。POSIX要求这个限制不小于128(每个进程)。系统为每个进程维护一个我们称之为key结构的结构数组,如图:key结构中的标志指示这个数据元素是否正在使用,所有的标志初始化为“不在使用”。当一个线原创 2014-11-14 13:31:16 · 1253 阅读 · 0 评论 -
libevent学习三
安装LibeventLibevent有一些贯穿于整个程序的全局设定。它们影响着整个库。你必须提前确定这些设定,否则可能会造成不一致的状态。Libevent的日志消息Libevent可以记录内部的错误和经过。当然编译时增加了日志支持,它也会记录调试信息。默认情况下,这些信息输出到标准错误。你可以使用自己的调试方法去重写它。#define EVENT_LOG_DEBUG 0#de原创 2015-01-20 23:12:33 · 907 阅读 · 0 评论 -
libevent学习一
libevent:一个事件通知库。libevent的API提供了一个可以执行回调函数的机制。这些事件可以是一个文件描述符或到达指定时间。而且,libevent也支持由signals或常规的timeout产生的回调。原创 2015-01-19 23:14:42 · 1365 阅读 · 0 评论 -
libevent学习二
Libevent库是用来开发高效,可移植的非阻塞IO。它的设计目标:1. 可移植性2. 高效性:Libevent试图使用每个平台上的最高效的非阻塞IO的实现3. 可扩展性:Libevent被设计成,即使程序需要去处理上万条活跃的socket也能运行良好。4. 方便性:不管在什么情况下,用最正常的方式去用libevent写一个程序,都可能稳定,可移植。Libevent库包原创 2015-01-20 20:38:46 · 1046 阅读 · 0 评论 -
libevent学习七
Bufferevents:概念和基础很多时候,一个程序需要处理一些数据的缓存,不止应用在答复event上。例如:当我们需要去写出数据,通常会这样做:1. faxu原创 2015-02-02 22:38:48 · 1253 阅读 · 0 评论 -
网络库
最近想写一个网络库。想要实现的目标:1. 负责收发消息,不关心消息格式2. 动态添加监听端口3. 动态添加对外连接4. 关闭连接原创 2015-01-06 21:35:38 · 961 阅读 · 2 评论 -
libevent学习六
eventsLibevent的基本操作单元是event。每个event都意味着一个条件集合,包括:1. 一个准备好读或写的文件描述符。2. 一个“将”准备好读或写的文件描述符(只有边缘模式下)3. 一个超时事件4. 一个信号事件5. 一个人为触发的事件Event有相似的生命周期。一旦你通过Libevent方法去设置了一个event,并把它与event_base相关联,那原创 2015-01-29 20:17:12 · 933 阅读 · 0 评论 -
libevent学习五
event loop事件循环一旦你向event_base注册了一些event,那你接下来希望Libevent等待事件的发生并且通知你。接口#define EVLOOP_ONCE 0x01#define EVLOOP_NONBLOCK 0x02#define EVLOOP_NO_EXIT_ON_EMPTY 0x04int event_b原创 2015-01-27 11:13:23 · 1787 阅读 · 0 评论 -
pthread_coroutine基于pthread的协程
使用Posix线程实现的coroutine协程的关键在于栈的保存沿用,有很多其他版本的C实现的coroutine,如:setcontex, setjmp/longjmp。我认为线程拥有自己的数据栈,天然提供栈的沿用,再利用pthread_mutex_t, pthread_cond_t来做异步唤醒,那pthread一定也可以实现coroutine。所以我就写了这个库。写的匆忙,质量不高,原创 2014-11-25 14:07:35 · 1066 阅读 · 0 评论 -
mq_open permission denied问题
在UNIX网络编程:卷2-进程间通信中的一个例子如下:#include #include #include #include #include #include #include "common.h"int main(int argc, char **argv) { int c, flags; mqd_t mqd; flags = O_RDWR | O_原创 2014-11-18 20:34:45 · 4771 阅读 · 1 评论 -
libevent学习四
构建event_base在你开始使用任何Libevent前,你需要先创建一个或多个event_base。每个event_base管理着一个event的集合,并可以检测出哪些event被激活了。如果event_base使用了锁,就可以在多线程中安全的访问它。但要注意它的主poll函数只能被单个线程运行。如果你想用多个线程运行IO迭代器,你需要为每个线程分配一个event_base。注:在以后原创 2015-01-22 23:00:39 · 1194 阅读 · 1 评论