假设有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(意味着公平的锁)。