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