マルチコアと同期
スピンロックが向かない場面として最も適切なものはどれか。
- Aロックを持つ時間が長く、待つスレッドがCPUをむだに使い続けてしまう場面
- Bロックを持つ時間が数十ナノ秒と非常に短い場面
- COSのカーネルの中で、眠ることのできない処理の場面
答えと解説を見る
正解:A. ロックを持つ時間が長く、待つスレッドがCPUをむだに使い続けてしまう場面
スピンロックで待つスレッドは、ロックが空くまでCPUを使い続けます。ロックを持つ時間が長いと、そのCPUの時間がすべてむだになり、ほかのスレッドの実行も妨げます。特にコアが1つしかないと、ロックを持つスレッドが実行されない限り空かないので、待ちは時間の割り当てが終わるまで続きます。長い待ちには、眠って待つミューテックスを使い、短い間だけ回ってから眠る方式もあります。
- A. 正しい。その場合は眠って待つロックの方が効率的です。
- B. 短い場合こそスピンロックが向いています。
- C. 眠れない場面ではスピンロックが使われます。