私はこの C++ プログラムを持っていますが、これは最終的に 2 つのスレッドでバラバラになります。1 つのスレッドが割り込みを待機し、割り込みが発生した場合はカウンターをインクリメントします。
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
今、私は非常に興味があります: 割り込みが発生した瞬間にミューテックスが 2 番目のスレッドによってロックされていたらどうなるでしょうか。割り込みはどのくらい深くなりますか?reactInterrupt() コードを終了しようとしている間、すべてを完全にロックしますか? その場合、CPU がミューテックスのロックが解除されるのを無防備に待機する (非常にまれな) デッドロック状況が発生するためです。それとも、割り込みは単にメソッドの実行をスケジュールするだけですか?これは、メソッドが CPU の実行リストに追加されていることを意味するだけでしょうか? その場合、メソッドはミューテックスが解放されるのを待つだけで済みます。これははるかに優れていると思います。