4 锁和线程
编写多线程程序的时候,在多个线程中同时访问同样的数据并不总是安全的。
libevent的结构体在多线程下通常有三种工作方式:
² 某些结构体内在地是单线程的:同时在多个线程中使用它们总是不安全的。
² 某些结构体具有可选的锁:可以告知libevent是否需要在多个线程中使用每个对象。
² 某些结构体总是锁定的:如果libevent在支持锁的配置下运行,在多个线程中使用它们总是安全的。
为获取锁,在调用分配需要在多个线程间共享的结构体的libevent函数之前,必须告知libevent使用哪个锁函数。
如果使用pthreads库,或者使用Windows本地线程代码,那么你是幸运的:已经有设置好的libevent预定义函数能够正确的使用pthreads或者Windows函数。
接口
这些函数在成功时都返回0,失败时返回-1。
如果使用不同的线程库,则需要一些额外的工作,必须使用你的线程库来定义函数去实现:
l 锁
l 锁定
l 解锁
l 分配锁
l 析构锁
l 条件变量
l 创建条件变量
l 析构条件变量
l 等待条件变量
l 触发/广播某条件变量
l 线程
l 线程ID检测
使用