c-event_base_loop和event_base_dispatch线程安全吗



event_base_loop()(发布者线程(和event_base_dispatch()(订阅者线程(函数是线程安全的吗?最近,我使用valgrind'shelgrind工具检查了我的应用程序是否存在任何同步错误。报告中提到,event_base_loop()event_base_dispatch()之间存在竞争条件,即使这两个函数都是用不同的struct event_base变量(struct event_base base_pub(发布者线程(和struct event_base base_sub(订阅者线程((调用的。下面是示例代码

Publisher线程

struct event_base base_pub = event_base_new();
while (true) {
... // publish data
event_base_loop(base_pub, EVLOOP_NONBLOCK);
sleep(1);
...
}

订阅线程

struct event_base base_sub = event_base_new();
while (true) {
... // register subscriber callback function
event_base_dispatch(base_sub);
...
}

如果您通过启用锁定/条件变量,它们是线程安全的

evthread_use_pthreads();

您还需要链接到libevent_pthreads。注意:

在调用任何其他Libevent函数之前,您需要设置图书馆如果要在多线程应用程序,您需要初始化线程支持–通常使用evthread_use_pthreads((或evthread_use_windows_threads((。

当前,只有一个线程可以在时间如果要同时在多个线程中运行事件,可以或者具有其事件将工作添加到工作队列的单个event_ base,或者可以创建多个eventbase对象。

相关内容

  • 没有找到相关文章

最新更新