为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕丝7291255 2023-03-04 13:09:57
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上等待输入。

查看完整回答
反对 回复 2023-03-06
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信