我是c和事件驱动编程的新手。
我们正在使用 libevent开发
例如,
extern int arr[100];
void some_func1() {
int flag;
// do something to change flag
if(flag == 0) {
update1(arr);
}else if(flag == 1) {
update2(arr);
}
}
void some_func2() {
// print something based on arr
}
some_func1
发生时将调用 event1
,并调用some_func2
如果发生event2
。
案例1.
先发生event1
,然后调用并完成some_func1
,以便正确更新arr
,然后event2
发生,并且打印正常
案例2.
先发生event1
,然后调用some_func1
,在其中间调用另一个event1
,然后arr
混乱。
答案 0 :(得分:1)
来自doc:
调度事件。
最后,您调用 event_base_dispatch()来循环和调度事件。您还可以使用 event_base_loop()进行更细粒度的控制。
目前,一次只能有一个线程调度给定的 event_base 。如果您想一次在多个线程中运行事件,您可以拥有一个 event_base ,其事件可以为工作队列添加工作,或者您可以创建多个 event_base 对象。
所以,如果你有一个线程和一个 event_base ,那么 event_base_dispatch()/ event_base_loop()在这个线程调用处理程序中逐个运行。
如果您有两个线程和两个 event_base (每个线程中有一个),那么它们可以独立工作。第一个 event_base 在第一个线程中逐个处理它的事件;第二个 event_base 在第二个帖子中逐个处理它的事件。
(我没有使用过libevent,但这就是事件循环的工作方式)