マルチコアと同期

ロックフリー(lock-free)のアルゴリズムの性質として正しいものはどれか。

  1. Aどれかのスレッドが途中で止まっても、ほかのスレッドのうち少なくとも1つは処理を進められる
  2. Bすべてのスレッドが、必ず決まった回数の手順で処理を終える
  3. Cアトミック命令を一切使わずに、共有データを更新する
答えと解説を見る

正解:A. どれかのスレッドが途中で止まっても、ほかのスレッドのうち少なくとも1つは処理を進められる

ロックを使うと、ロックを持ったスレッドが割り込みや優先度の低さで止まると、ほかの全員が待たされます。ロックフリーのアルゴリズムはCASなどで共有データを直接更新し、あるスレッドが失敗してやり直すのは、ほかの誰かが成功したときだけ、という形にします。そのため、全体としては常にどれかのスレッドが進みます。ただし正しく作るのは難しく、ABA問題などにも注意が必要です。

  • A. 正しい。ロックを持ったまま止まるスレッドの問題がありません。
  • B. それはより強いウェイトフリーの性質です。
  • C. CASなどのアトミック命令を使って作ります。
この分野を解く 分野ページへ

マルチコアと同期のほかの問題

  1. クリティカルセクションの説明として正しいものはどれか。
  2. 並列プログラムで使われるバリア同期の説明として正しいものはどれか。
  3. 64個のコアが、1つの共有カウンタを同時にアトミック命令で更新し続けると、コアを増やしても速くならない。主な理由はどれか。
  4. NUMA(不均一メモリアクセス)のシステムの説明として正しいものはどれか。
  5. LinuxのNUMAシステムでよく使われるファーストタッチの方針(初めてページに書き込んだスレッドが動いているノードのメモリにそのページを置く)で注意すべき点として正しいものはどれか。