Я новичок в 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
перепутывается.
- Произойдет ли случай 2? Можно ли сделать some_func1 атомарной функцией?