事件驱动编程模式下C代码什么时候中断?

When does a C code interrupt in event driven programming mode ?

我是 c 和事件驱动编程的新手。

我们正在使用libevent开发

  1. 中断如何工作,何时发生?
  2. 它会在一个函数的中间中断,还是总是 在函数结束时中断?

例如,

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被搞砸了。

  1. 情况2会发生吗?是否可以使 some_func1 成为原子 功能?

来自文档:

Dispatching events.

Finally, you call event_base_dispatch() to loop and dispatch events. You can also use event_base_loop() for more fine-grained control.

Currently, only one thread can be dispatching a given event_base at a time. If you want to run events in multiple threads at once, you can either have a single event_base whose events add work to a work queue, or you can create multiple event_base objects.

所以,如果你有一个线程和一个 event_base 那么 event_base_dispatch()/event_base_loop()在这个线程中调用handler函数一个一个地执行。

如果您有两个线程和两个 event_base(每个线程一个),那么它们将独立工作。第一个event_base在第一个线程中一个一个地处理它的事件;第二个 event_base 在第二个线程中一个接一个地处理它的事件。

(我没有使用过 libevent,但这通常是事件循环的工作方式)