C# 入門 & 実践 / C sharp
501-2. lock ロックしてリソースを保護
まずは、ちゃんとメッセージを表示しましょう。
lock
を利用して、
res += Thread.CurrentThread.Name + " : " + count + "\n";
部分が混乱しないようにします。
lock(this)で囲みます。
private void counter()
{
try
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(10);
count++;
lock(this){
res += Thread.CurrentThread.Name + " : " + count + "\n";
}
}
}
}
これで実行すると!
T2 : 1
T1 : 1
T1 : 2
T2 : 3
T1 : 4
T2 : 5
T2 : 6
T1 : 6
T2 : 7
T1 : 7
T1 : 8
T2 : 9
T2 : 10
T1 : 10
T1 : 11
T2 : 12
T1 : 13
T2 : 14
T2 : 16
T1 : 16
のように、とりあえず20回メッセージを繋げることはできました^-^;
しかし数値が重複してますね・・・
もちろん count++ 部分をlockに入れてしまうという手もあります。
しかし、lock 部が大きくならないように Interlocked を使ってみます。
501-1. マルチスレッド:thread を作ってみる。 «
マルチスレッド同期 »
501-3. Interlocked で数値増減
C# 入門 & 実践 / C sharp