假設有3個線程T1,T2,T3當一個線程掛起時,調用信號()將鎖等鎖定在等待()誰將進入CS?
我的代碼(Condition con = lock.newCondition();
)此pieace:
lock.lock();
if (Thread.currentThread().getName().equals("t1"))
con.await();
if (Thread.currentThread().getName().equals("t2"))
con.signal();
lock.unlock();
T1運行此代碼第一然後t2和t3懸浮在lock.lock();
。
t1執行後con.await();
t2進入並執行con.signal();
。
我的問題是誰會在信號後進入臨界區?
它會因爲暫停在lock.lock();
中的await()或t3而暫停嗎?
神諭文檔指出:
如果任何線程都在此條件下再一個就是選擇 醒來等待。該線程在返回 之前必須重新獲取該鎖。
從最後一句話來看,是否意味着在t1醒來後,它會與鎖上的t3競爭?
如果是這樣,它保證誰在t1,t3將進入? 假設我沒有在鎖的構造函數中傳遞true(意味着公平的鎖)。