C# 入門 & 実践 / C sharp
501-3. Interlocked で数値増減
count++;
部分を
int temp = Interlocked.Increment(ref count);
として、メッセージ書き出し部分も temp を書き出します。
private void counter( )
{
try
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(10);
int temp = Interlocked.Increment(ref count);
lock(this){
res += Thread.CurrentThread.Name + " : " + temp + "\n";
}
}
}
}
すると!
T1 : 1
T2 : 2
T1 : 3
T2 : 4
T1 : 5
T2 : 6
T1 : 7
T2 : 8
T1 : 9
T2 : 10
T1 : 11
T2 : 12
T1 : 13
T2 : 14
T1 : 15
T2 : 16
T1 : 17
T2 : 18
T1 : 19
T2 : 20
綺麗にこうなりました。
これだと単純すぎるので交互なのでSleep時間を変えてみましょう。
しかし ThreadStartでは
void func()
と引数を取れないメソッドしかデリゲート出来ません!
ということで、次に進みます。
501-2. lock ロックしてリソースを保護 «
マルチスレッド同期 »
501-4. ParameterizedThreadStart でパラメータを渡す!
C# 入門 & 実践 / C sharp