我有这个 C++ 程序,它最终在两个线程中分崩离析。一个线程等待中断,如果发生,它将增加一个计数器:
void reactInterrupt(){
counter_lock.lock();
std::cout<< ++counter;
counter_lock.unlock();
}
中断代码来自wiringPi 还有秒线程,它休眠x秒,当它醒来时,它执行以下操作:
//blaaah
int coutercopy;
counter_lock.lock();
countercopy = counter;
counter = 0;
counter_lock.unlock();
//more blaah
现在我非常好奇:如果互斥锁在发生中断的那一刻被第二个线程锁定会发生什么。中断有多深?它在尝试完成 reactInterrupt() 代码时是否完全锁定了所有内容?因为如果是这种情况,我会看到一个(非常罕见的)死锁情况,CPU 会无条件地等待互斥锁解锁。还是中断只是安排方法执行,这仅意味着该方法被添加到 CPU 必须做的事情列表中?在这种情况下,该方法只会等待互斥锁变得空闲,我认为这会更好。