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貢獻(xiàn)1786條經(jīng)驗 獲得超11個贊
第1個線程獲得mylocker的鎖后輸出myMethod is ok,然后將done設(shè)置為真并釋放mylocker的鎖(因為Console.ReadLine();在lock塊的外面),然后掛起在Console.ReadLine方法上等待,但此時鎖已釋放了(執(zhí)行到了lock塊的外面)。
第1個線程釋放mylocker的鎖以前第2個線程一直在等待,當(dāng)?shù)?個線程釋放mylocker的鎖以后,第2個線程獲得了mylocker的鎖,輸出myMethod is not ok,然后掛起在方法Console.ReadLine上等待。
所以輸出兩行。但程序并未結(jié)束,兩個線程都掛起在Console.ReadLine上等待輸入。
- 1 回答
- 0 關(guān)注
- 109 瀏覽
添加回答
舉報
0/150
提交
取消