スレッドセーフな処理(lockキーワード)
プログラミングC# p519
同じ処理をlockを使ってやってみる。
using System; using System.Threading; class ThreadTest { private static int zandaka = 1000000; private static Object lockObj = new Object(); static void Main(string[] args) { ThreadStart ts1 = new ThreadStart(delegate(){ lock(lockObj) { int currentZandaka = zandaka; // 残高を使ったチェックなどの処理 Thread.Sleep(100); // 残高を減額(引き出し) zandaka = currentZandaka - 200000; } }); ThreadStart ts2 = new ThreadStart(delegate(){ lock(lockObj) { int currentZandaka = zandaka; // 残高を使ったチェックなどの処理 Thread.Sleep(100); // 残高を増額(預け入れ) zandaka = currentZandaka + 300000; } }); Thread t1 = new Thread(ts1); Thread t2 = new Thread(ts2); t1.Start(); t2.Start(); t1.Join(); t2.Join(); Console.WriteLine("zandaka = {0}", zandaka); } }
結果はこう。
zandaka = 1100000
というわけで問題なく出来てます。