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(); } }}
1 回答
Qyouu
TA贡献1786条经验 获得超11个赞
第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上等待输入。
- 1 回答
- 0 关注
- 74 浏览
添加回答
举报
0/150
提交
取消