スレッドの排他制御
今日は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;
}
}
}
}
}
<<
詳しくは元記事をみてね。