CLH 동기 화 대기 열 은 어떻게 불공평 과 공평 을 실현 합 니까?
1275 단어 다 중 스 레 드 및 병발
The wait queue is a variant of a “CLH” (Craig, Landin, and Hagersten) lock queue. CLH locks are normally used for spinlocks
1. 명칭: CLH 는 세 사람의 이름 으로 구성 (Craig, Landin, and Hagersten) 2. 데이터 구조: FIFO 양 방향 링크 3. 역할: 자원 방출 대기 행렬
불공평 과 공평 을 실현 하 다
공평 자물쇠 와 불공평 자 물 쇠 는 hasQueued Predecessors () 라 는 방법 에 있 습 니 다.
public final boolean hasQueuedPredecessors() {
Node t = tail;
Node h = head;
Node s;
//
//
//
return h != t &&
((s = h.next) == null || s.thread != Thread.currentThread());
}
스 레 드 가 doAcquire 방법 에서 자 물 쇠 를 가 져 올 때 동기 화 대기 열 에 먼저 가입 한 다음 상황 에 따라 차단 에 빠 집 니 다.막 힌 노드 가 한 동안 깨 어 났 을 때 이 때 더 많은 새로운 라인 이 와 서 자 물 쇠 를 빼 앗 았 습 니 다. 이 새로운 라인 들 은 동기 화 대기 열 에 가입 하지 않 았 습 니 다. 즉, try Acquire 방법 에서 자 물 쇠 를 가 져 왔 습 니 다.
공정 한 잠 금 에서 이 새 스 레 드 들 은 동기 화 대기 열 에 노드 대기 가 존재 하 는 것 을 발견 할 수 있 습 니 다. 그러면 이 새 스 레 드 들 은 자 물 쇠 를 가 져 올 수 없고 줄 을 서 있 습 니 다.
불공평 한 자물쇠 아래 에서 이 새 라인 들 은 줄 을 서서 깨 어 난 라인 과 자 물 쇠 를 쟁탈 하고 실패 한 동기 화 대열 에서 줄 을 선다.따라서 여기 서 의 공평 여 부 는 깨 어 난 스 레 드 와 아직 동기 화 대기 열 에 가입 하지 않 은 스 레 드 를 대상 으로 하 는 것 입 니 다. 이미 동기 화 대기 열 에서 막 힌 스 레 드 에 있어 내부 자체 가 공평 합 니 다. 순서대로 깨 어 났 기 때문에 이것 은 AQS 노드 깨 우기 체제 와 동기 화 대기 열의 FIFO 특성 에 따라 결 정 됩 니 다.