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

时间:2017-09-04 08:30:33

标签: c linux libevent

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

我们正在使用 libevent开发

  1. 中断如何工作,何时发生?
  2. 它会在函数中间中断,还是始终中断 在函数结束时中断?
  3. 例如,

    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成为原子 功能?

1 个答案:

答案 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,但这就是事件循环的工作方式)