ReentrantLock
API文档说:
我无法理解第二点:
如果一个线程连续多次获得锁,那么按照第1点,其他线程将等待更长时间,这意味着它们下一次将获得锁。那么,这如何不影响线程调度的公平性呢?因此,我觉得公平的锁是最长的等待时间第一线程调度。
发布于 2020-03-28 17:39:59
我认为他们只是想把公平逻辑和调度逻辑分开。线程可能是并发的,但这并不意味着它们试图同时访问锁。线程优先级请求仅仅是对操作系统的“提示”,并且是可能期望的从来没有保证。
因此,仅仅因为有线程A和B,它们可能请求一个锁,甚至可能具有相同的行为,一个线程就可以在其他锁请求之前执行、获取、释放、重新获取:
A: Request Lock -> Release Lock -> Request Lock Again (Succeeds) B: Request Lock (Denied)... ----------------------- Time --------------------------------->
线程调度逻辑与锁逻辑解耦。
还有其他调度问题,其负担往往落在软件设计人员身上,请参阅饥饿与利夫洛克。
https://stackoverflow.com/questions/60903107
复制相似问题