0
我有這個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必須做的事情列表中?在這種情況下,這個方法只會等待互斥體變得自由,我認爲這會更好。