0

ミューテックスを使用するとき、私はこれについて考えていました。

たとえば、スレッドをミューテックスでロックする場合

m.lock();
a += b;
m.unlock();

2 つのスレッドが衝突するとどうなりますか? それは次のようですか:

1) スレッド A をロックすることにより、ロックが解除されるまで中断せずに実行する必要があり、a += b ステートメントが発生している間はコンテキスト スイッチが発生しないことを CPU に伝えます。

2) スレッド A がロックし、a += b ステートメントのコンテキスト切り替えが発生している間に、スレッド B はロックされていることを確認し、制御を放棄し、すべてが A に戻り、a += b が終了します。操作とアクセスのロックを解除しますか?

ケース 2 の場合、コードの特定の部分がコンテキスト スイッチによって中断されないことを CPU に伝える方法はありますか?

4

2 に答える 2

2

It is 2, and there is no direct way to say that code must run to completion without a context switch. You could probably get close by bumping the execution priority of the thread but such shenanigans are usually frowned upon and suggest a bad design.

于 2013-01-22T18:17:43.403 に答える
0

どちらの種類のミューテックスも存在しますが、最初の種類は特権プログラム (O/S カーネル、ハードウェア ドライバー) でのみ使用されます。ユーザーには第 2 種のみが与えられます。そうしないと、ユーザー プログラムがシステム全体をハングさせる可能性があります。

于 2013-01-23T14:36:34.873 に答える