//C#での実装(失敗、デッドロックする) //※インデントに全角空白*2を使用 public class ThreadMain{ private EventWaitHandle lockObj; public ThreadMain(EventWaitHandle lockObj){ this.lockObj = lockObj; } public void run(){ lock(lockObj){ //ここには入れない Console.WriteLine("sub in sync"); lockObj.Set(); Console.WriteLine("sub out sync"); } } } public void test(){ EventWaitHandle lockObj = new EventWaitHandle(false, EventResetMode.AutoReset); ThreadMain tm = new ThreadMain(lockObj); Thread t = new Thread(tm.run); lock(lockObj){ t.Start(); Console.WriteLine("main in sync"); lockObj.WaitOne(); //ここで待機中の間だけlockObjを解放したい Console.WriteLine("main out sync"); } }