ReentrantReadWriteLock에 대한 제한이 있습니까? 지금은 내 응용 프로그램을 테스트하고있어 내 쓰기 잠금이 더 이상 잠금을 제공하지 않는 것 같습니다 (true를 반환 : tryLock()
).ReentrantReadWriteLock 제한
1
A
답변
0
(true를 반환 : tryLock()) 내가 20 개의 스레드 일 때.
CPU가 20 개가 아니라면이 스레드는 동시에 모두 실행되지 않으며 실행중인 스레드는 그렇지 않은 스레드를 내쫓을 수 있습니다. 이것을 피하기 위해서는 공정한 자물쇠를 사용해야합니다.
더 나은 해결책은 모든 잠금 장치에서 중요한 경합이있는 코드를 작성하지 않는 것입니다.
+0
Fair Lock은 그가 'tryLock'일 때 도움이되지 않습니다. 블로킹'lock' 호출만이 스레드가 얼마나 오랫동안 기다리고 있는지 기억할 수 있습니다. – Holger
2
한계는 65535 개의 잠금이므로 20 개의 스레드로 치지는 않을 것 같습니다. 가능한 한 제한은 재진입 인수를 계산하지만,이를 위반하면 오류가 발생하고 잘못된 반환 값은 tryLock()
이 아닙니다.
시스템이 바쁜만큼 tryLock()
을 시도하면 정확한 순간에 잠금을 사용할 수 없습니다. 합리적인 시간 초과로 차단하는 호출로 전환하여 다른 스레드가 완료되고 잠금을 사용할 수있을 때까지 스레드가 대기 할 수 있도록해야합니다.
* 쓰기 잠금 *은 일반적으로 최대 * 1 개의 소유 스레드를 지원합니다. 동시에 읽기 잠금이 없어야합니다. 읽기 잠금을 사용하는 스레드가 20 개일 때, 쓰기 잠금에서'tryLock'을 할 때 적어도 하나의 스레드가 읽기 잠금을 소유하고있을 가능성이 높습니다. – Holger
@Holger 좋은 소리. 아마 그럴거야! – Martijn