2016-10-10 7 views
1

は:std :: lock_guardをインターラプトすることはできますか?私のようなlock_guardの下にいくつかのコードをお持ちの場合

std::thread t([&]() 
{ 
    std::lock_guard<std::mutex> lock(m); 
    // some simple operations 
}); 

私は「一部の操作は、」tスレッドが実行されている。このコアCPUに割り込まれないことを保証を持っていますか? lock_guardの後にコンテキスト切り替えができますか?

+0

スレッドとミューテックスについて考えてみましょう。 –

+0

あなたの*プログラム*は操作を中断しません。 @Biagio Festa。 –

+0

私に尋ねますか? OK、私は答えるでしょう...この構造は、 "いくつかの単純な操作"の間に競合状態が存在しないことを保証しますが、スレッドがブロックされているかどうか疑問です。(つまり、操作はこのCPUコアで中断することなく実行されます。 ) – peter55555

答えて

1

コンテキストスイッチがありますが、他のすべてのスレッドがロックの背後でブロックされることが保証されています。

0

いいえ、ミューテックスで保護されたクリティカルセクションは、明示的に要求しない限り、リアルタイム優先度で実行されません。これは標準のC++ライブラリでは実行できません。カーネルは、mutexで待機していない別のスレッド(同じプロセス内または他のプロセス内)をスケジュールできます。リアルタイム優先度の設定は、OS固有のシステムコールでのみ行うことができます。

関連する問題