回答編集履歴
6
修正
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
スレッドセーフな作りになってないので、複数のスレッドでAssetが同時に呼ばれると最初の_instanceのnewが終わるまでの間に
|
33
|
+
スレッドセーフな作りになってないので、複数のスレッドでAssetが同時に呼ばれると最初の_instanceのnewが終わるまでの間に他のスレッドがif文をすり抜けてしまう事が起こり得ます。
|
34
34
|
|
35
35
|
(newが完了するまで_instanceはnullのままなので)
|
36
36
|
|
5
修正
test
CHANGED
@@ -30,7 +30,9 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
スレッドセーフな作りになってないので、複数のスレッドでAssetが同時に呼ばれると_instanceが
|
33
|
+
スレッドセーフな作りになってないので、複数のスレッドでAssetが同時に呼ばれると最初の_instanceのnewが終わるまでの間に各スレッドがif文をすり抜けてしまう事が起こり得ます。
|
34
|
+
|
35
|
+
(newが完了するまで_instanceはnullのままなので)
|
34
36
|
|
35
37
|
|
36
38
|
|
4
修正
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
スレッドセーフな作りになってないので、複数のスレッドで_instanceがNULLの間に各スレッドがif文をすり抜けているのだと思われます。
|
33
|
+
スレッドセーフな作りになってないので、複数のスレッドでAssetが同時に呼ばれると_instanceがNULLの間に各スレッドがif文をすり抜けているのだと思われます。
|
34
34
|
|
35
35
|
|
36
36
|
|
3
静的コンストラクタ補足追加
test
CHANGED
@@ -5,6 +5,8 @@
|
|
5
5
|
静的コンストラクタとは以下のような書き方をするもので、
|
6
6
|
|
7
7
|
プログラム全体で数えて初めてそのクラスが作られた時に一度だけ実行されます。
|
8
|
+
|
9
|
+
追記:staticメンバが初めて参照される場合でも呼ばれるようです。その場合でもプログラム全体で実行されるのは一度だけです。
|
8
10
|
|
9
11
|
```C#
|
10
12
|
|
2
静的コンストラクタの書き方が間違っていたので修正
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
{
|
14
14
|
|
15
|
-
|
15
|
+
static MyClass() // 通常のコンストラクタの前にstaticが付く
|
16
16
|
|
17
17
|
{
|
18
18
|
|
1
修正
test
CHANGED
@@ -60,7 +60,7 @@
|
|
60
60
|
|
61
61
|
{
|
62
62
|
|
63
|
-
lock (lockObject)
|
63
|
+
lock (lockObject) // このスコープ内は一つのスレッドしか通過できず、そのスレッドが完了するまで他のスレッドは待ち状態になる
|
64
64
|
|
65
65
|
{
|
66
66
|
|
@@ -75,8 +75,6 @@
|
|
75
75
|
}
|
76
76
|
|
77
77
|
return _instance;
|
78
|
-
|
79
|
-
|
80
78
|
|
81
79
|
}
|
82
80
|
|