事件驱动编程模式下C代码啥时候中断?
Posted
技术标签:
【中文标题】事件驱动编程模式下C代码啥时候中断?【英文标题】:When does a C code interrupt in event driven programming mode ?事件驱动编程模式下C代码什么时候中断? 【发布时间】:2017-09-04 08:30:33 【问题描述】:我是 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
,打印就ok了
案例 2.
先出现event1
,然后调用some_func1
,中间又调用了event1
,然后arr
搞砸了。
-
案例 2 会发生吗?是否可以使 some_func1 成为原子
功能?
【问题讨论】:
【参考方案1】:来自文档:
调度事件。
最后,您调用 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,但事件循环通常是这样工作的)
【讨论】:
以上是关于事件驱动编程模式下C代码啥时候中断?的主要内容,如果未能解决你的问题,请参考以下文章