「Androidは電気羊の夢を見るか」を読みたい管理者のブログ

仕事などでの色々な発見を記事にしてます。不定期更新。

スレッドの排他制御

今日はC#のマルチスレッドを使った時の排他制御について
http://ufcpp.net/study/csharp/sp_thread.html
こちらの記事で分かりやすく解説されてたのですが、なにせサンプルコードが.NET4.0以降にしか対応してない!
ということで.NET3.5で動くコードを書いてみましたよって話。

>>
using System;
using System.Threading;

namespace ThreadTest
{
    class Program
    {
        static int num = 0;


        static Program syncObject = new Program();


        static void Main(string args)
        {
            const int ThreadNum = 20;

//スレッドを20個つくります。
            Thread
t = new Thread[ThreadNum];

            for (int i = 0; i < t.Length; i++)
            {
           
                t[i] = new Thread(new ThreadStart(method));
                t[i].Start();
            }
//スレッドが終わるまで待ちます。
            for (int i = 0; i < t.Length; i++)
            {
                t[i].Join();
            }

            Console.WriteLine(num);
        }
        private static void method()
        {
            const int LoopNum = 20;

            for (int j = 0; j < LoopNum; j++)
            {
                lock (syncObject)
                {
                    int tmp = num;
                    Thread.Sleep(1);
                    num = tmp + 1;
                }
            }
        }
    }
}
<<

 


詳しくは元記事をみてね。