teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

シングルトンについて追記

2017/11/13 02:01

投稿

masaya_ohashi
masaya_ohashi

スコア9210

answer CHANGED
@@ -1,3 +1,7 @@
1
+ おおざっぱな理解のための例え話をしようと思います。
2
+
3
+ ---
4
+
1
5
  例えば管理者(あなた)と作業者Aさんが居たとします。Aさんは、あなたから渡される指示書に書かれたことを行います。
2
6
 
3
7
  あなたはAさんに三枚の指示書を渡しました。Aさんは渡された指示書を、渡された順にこなしていきます。これが**シングルスレッド**です。作業者が一人しかおらず、作業も渡された順に一つずつこなす状態です。
@@ -8,7 +12,7 @@
8
12
 
9
13
  Aさん、Bさんは作業の進行を円滑に行うために、それぞれ自分用のメモ帳を持っています。これが**スレッドローカル**です。Aさんのメモ帳はAさんしか見ませんし、Bさんのメモ帳はBさんしか見ません。
10
14
 
11
- あなたは机の上に大きな模造紙を用意しました。この模造紙にある計算結果をどんどん書いてもらうことが目的です。
15
+ あなたは机の上に大きな模造紙を一枚だけ用意しました。この模造紙にある計算結果をどんどん書いてもらうことが目的です。一枚しか用意しないので、作業者は間違えようがありません。これが**シングルトン**です。全作業者が共通で持つ、全体で1つしかないことが保証されたものです。
12
16
 
13
17
  AさんBさんにそれぞれ「こういった計算をして、この模造紙にどんどん書いていってほしい」という指示書を出しました。AさんBさんはそれぞれ自分の手元のメモ帳を使って計算し、計算が終わり次第模造紙に書くことにしました。
14
18
 
@@ -18,4 +22,5 @@
18
22
  - **シングルスレッド**は作業者が一人しかおらず、渡された処理を渡された順にこなしていく
19
23
  - **マルチスレッド**は作業者が二人以上おり、それぞれの作業が同時に進む
20
24
  - 作業者ごとに**スレッドローカル**と呼ばれるメモ帳のようなものを持っている
25
+ - 全作業者がアクセス可能で、全体に一つしかないものが**シングルトン**
21
26
  - **スレッドセーフ**にしないとお互いが影響しあってまずいことになる