gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:14 25 4
gpt4 key购买 nike

我是 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() 将一一运行。

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

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

关于c - 事件驱动编程模式下C代码什么时候中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46033122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com