怎么下面的内容锁不住?结果还打印了两行?为啥

namespace mylock{ class Program { static bool done; static object mylocker = new object(); static void Main(string[] args) { new Thread(myMethod).Start(); myMethod(); } static void myMethod() { lock (mylocker) { if (!done) { System.Console.WriteLine("myMethod is ok"); done = true; } else { System.Console.WriteLine("myMethod is not ok"); } } Console.ReadLine(); } }}




慕丝7291255
浏览 122回答 1
1回答

Qyouu

第1个线程获得mylocker的锁后输出myMethod is ok,然后将done设置为真并释放mylocker的锁(因为Console.ReadLine();在lock块的外面),然后挂起在Console.ReadLine方法上等待,但此时锁已释放了(执行到了lock块的外面)。第1个线程释放mylocker的锁以前第2个线程一直在等待,当第1个线程释放mylocker的锁以后,第2个线程获得了mylocker的锁,输出myMethod is not ok,然后挂起在方法Console.ReadLine上等待。所以输出两行。但程序并未结束,两个线程都挂起在Console.ReadLine上等待输入。
打开App,查看更多内容
随时随地看视频慕课网APP