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