回答編集履歴

6

修正

2016/10/25 04:26

投稿

ishi9
ishi9

スコア1294

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
 
33
- スレッドセーフな作りになってないので、複数のスレッドでAssetが同時に呼ばれると最初の_instanceのnewが終わるまでの間にスレッドがif文をすり抜けてしまう事が起こり得ます。
33
+ スレッドセーフな作りになってないので、複数のスレッドでAssetが同時に呼ばれると最初の_instanceのnewが終わるまでの間に他のスレッドがif文をすり抜けてしまう事が起こり得ます。
34
34
 
35
35
  (newが完了するまで_instanceはnullのままなので)
36
36
 

5

修正

2016/10/25 04:26

投稿

ishi9
ishi9

スコア1294

test CHANGED
@@ -30,7 +30,9 @@
30
30
 
31
31
 
32
32
 
33
- スレッドセーフな作りになってないので、複数のスレッドでAssetが同時に呼ばれると_instanceがNULLの間に各スレッドがif文をすり抜けているのだと思われます。
33
+ スレッドセーフな作りになってないので、複数のスレッドでAssetが同時に呼ばれると最初の_instanceのnew終わるまでの間に各スレッドがif文をすり抜けてう事が起こり得ます。
34
+
35
+ (newが完了するまで_instanceはnullのままなので)
34
36
 
35
37
 
36
38
 

4

修正

2016/10/25 04:25

投稿

ishi9
ishi9

スコア1294

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

静的コンストラクタ補足追加

2016/10/25 04:22

投稿

ishi9
ishi9

スコア1294

test CHANGED
@@ -5,6 +5,8 @@
5
5
  静的コンストラクタとは以下のような書き方をするもので、
6
6
 
7
7
  プログラム全体で数えて初めてそのクラスが作られた時に一度だけ実行されます。
8
+
9
+ 追記:staticメンバが初めて参照される場合でも呼ばれるようです。その場合でもプログラム全体で実行されるのは一度だけです。
8
10
 
9
11
  ```C#
10
12
 

2

静的コンストラクタの書き方が間違っていたので修正

2016/10/25 04:18

投稿

ishi9
ishi9

スコア1294

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  {
14
14
 
15
- public static MyClass()
15
+ static MyClass() // 通常のコンストラクタの前にstaticが付く
16
16
 
17
17
  {
18
18
 

1

修正

2016/10/25 04:16

投稿

ishi9
ishi9

スコア1294

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