スレッド・並行制御とは?排他制御と、デッドロック

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

スレッドとは(全体像)

スレッドとは、プロセス(実行中のプログラム)の中にある、より小さな実行単位のことだ。1つのプロセスの中で、複数のスレッドを並行して動かすことを、マルチスレッドという。

部屋でたとえると分かりやすい。プロセスは「独立した部屋を持つ住人」、スレッドは「同じ部屋に住むルームメイト」だ。

ここでカギになるのが、プロセスとの違いプロセスは、それぞれメモリが独立している(切り替えのコストが大きい)。一方、スレッドは、同じプロセス内でメモリを共有する(軽くて、切り替えが速い)

ここで一番のポイント。スレッドは、プロセスそのものではない。「スレッド=プロセス」と思い込むと誤りで、スレッドはプロセスの中の、軽量な実行単位だ。


詳しく:排他制御と、デッドロック

ここが心臓部。ポイントを表で押さえよう。

スレッド・並行制御のポイント

項目やさしい意味
スレッドプロセス内の、軽量な実行単位
プロセスとの違いプロセスはメモリ独立、スレッドはメモリ共有(軽い)
排他制御同じデータを同時にいじらないよう、ロックして順番に使う
デッドロック互いに相手の資源を待ち合って、両方が止まる状態

スレッドはメモリを共有するので、複数のスレッドが、同じデータを同時にいじると、おかしくなることがある。これを防ぐのが、排他制御ロック(ミューテックスやセマフォ)を使って、順番に使うようにするしくみだ。

ここで一番のポイント。メモリを共有するからこそ、排他制御が必要だ。「スレッドでは排他制御は要らない」と思い込むと誤りになる。なお、デッドロック(互いに相手の資源を待ち合って、両方が止まってしまう状態)にも注意が必要だ。

わかりやすく言い換えると

身近なたとえで整理しよう。

スレッドは、「同じ部屋(プロセス)に住むルームメイト。物(メモリ)を共有する」イメージ。プロセスが独立した部屋の住人なら、スレッドは共同生活だ。

「メモリを共有するから排他制御が必要」というのは、同じ物を同時に使おうとすると取り合いになるので、順番のルールがいること。要するに、共有するからこそ、ロックして順番に使う。

デッドロックは、「お互いが相手の持っている物を待ち続けて、どちらも動けなくなる状態」こと。つまり、待ち合いで止まってしまう。


試験のツボ

🔴 一番出る:スレッドの正体

①プロセスの中にある、より小さな実行単位(軽量)

②1プロセス内で複数を並行に動かす=マルチスレッド

🔴 次に出る:プロセスとの違い

①プロセスはメモリ独立(切り替えが重い)

②スレッドはメモリ共有(軽くて、切り替えが速い)

🟡 押さえると安定:排他制御とデッドロック

①メモリを共有するから、排他制御(ロックして順番に使う)が必要

②デッドロック=互いに待ち合って、両方が止まる状態


よくある間違い

「スレッドは、プロセスとまったく同じものだ」→ ✗  スレッドは、プロセスの中の、より小さな(軽量な)実行単位。

「スレッドでは、排他制御は必要ない」→ ✗  メモリを共有するので、排他制御(順番に使うしくみ)が必要。

「スレッドは、プロセスよりメモリの切り替えが重い」→ ✗  逆で、スレッドはメモリ共有なので軽い。重いのはプロセスの切り替え。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(スレッドの正体)

📝 オリジナル問題 1 スレッドの正体

スレッドに関する次の記述のうち、最も適切なものはどれか。

  1. プロセスの中にある、より小さな実行単位(軽量)のことである
  2. 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
  3. 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
  4. 完成したシステムを宣伝して、より多く売るための広告活動である
セクハム
セクハム 解答・解説

解答は 1 だよ!

スレッドは、プロセスの中にある、より小さな実行単位(軽量)なんだよ!同じ部屋に住むルームメイトのイメージだね!

選択肢2は給与計算、選択肢3は請求書の事務、選択肢4は広告で、どれも違うよ!

選択肢判定理由
1プロセス内の軽量な実行単位で正しい
2給与計算のしくみではない
3請求書の事務の話
4広告活動ではない

オリジナル問題2(プロセスとの違い)

📝 オリジナル問題 2 プロセスとスレッドの違い

プロセスとスレッドの違いに関する次の記述のうち、最も適切なものはどれか。

  1. 社員の給与を計算するときだけ、違いが出るとされているものである
  2. 取引先への請求書の枚数しだいで、違いが決まるとされているのだ
  3. プロセスはメモリ独立、スレッドはメモリ共有で軽いものなのである
  4. プロセスもスレッドも、まったく同じものだとされているのである
セクハム
セクハム 解答・解説

解答は 3 だよ!

プロセスはメモリ独立、スレッドはメモリ共有で軽いんだよ!だからスレッドは切り替えが速いんだね!

選択肢1の給与、選択肢2の請求書、選択肢4の「まったく同じ」は、いずれも違うよ!

選択肢判定理由
1給与計算で違いが出るのではない
2請求書の枚数で決まるのではない
3プロセス=メモリ独立・スレッド=共有で正しい
4プロセスとスレッドは違う

オリジナル問題3(排他制御)

📝 オリジナル問題 3 排他制御

スレッドの排他制御に関する次の記述のうち、最も適切なものはどれか。

  1. 社員の給与を計算するときだけ、必要だとされているものである
  2. メモリを共有するので、ロックして順番に使う必要があるのである
  3. 取引先へ請求書を郵送するときだけ、必要だとされているのである
  4. スレッドでは、排他制御はいっさい必要ないとされているのである
セクハム
セクハム 解答・解説

解答は 2 だよ!

排他制御は、メモリを共有するので、ロックして順番に使う必要があるんだよ!同じ物を同時に使うと取り合いになるからだね!

選択肢1の給与、選択肢3の請求書、選択肢4の「必要ない」は、いずれも違うよ!

選択肢判定理由
1給与計算のときだけではない
2共有するのでロックして順番に使うで正しい
3請求書のときだけではない
4共有メモリで排他制御は必須

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る