두 인큐어러 큐 구현 Common2
초록
본 논문은 합의 번호가 2인 객체들만을 사용해, 두 명의 인큐어러와 다수의 디큐어러가 동시에 작동할 수 있는 대기‑무관(Wait‑free) FIFO 큐 알고리즘을 제시한다. 이는 기존에 알려진 제한된 동시성 구현들을 확장한 최초의 Common2 큐 구현이다.
상세 분석
이 연구는 Herlihy가 제시한 “Consensus number 2 객체들의 구현 가능성” 문제에 대한 구체적인 답을 제공한다. 기존에는 Fetch&Add, Swap, Stack 등 몇몇 객체가 Common2에 속함이 증명되었지만, Queue는 여전히 미해결 상태였다. 저자들은 두 인큐어러와 무제한 디큐어러를 지원하는 대기‑무관 큐를 설계함으로써 이 공백을 메웠다. 핵심 아이디어는 기존 단일 인큐어러 알고리즘(알고리즘 1)의 구조를 두 차원 배열로 확장하고, 각 셀에 대해 디큐어러가 접근하기 전에 “deqActive” 플래그를 설정하도록 하는 것이다. 인큐어러는 셀에 데이터를 기록한 뒤, 해당 플래그가 이미 true이면 자신이 디큐어러에 의해 선점(overtaken)된 것으로 판단하고, 다음 행(row)으로 이동해 새로운 셀에 데이터를 기록한다. 이때 두 번째 차원은 인큐어러가 “overtaken” 상황을 복구할 수 있게 해 주며, Swap 객체를 이용해 셀을 파괴적으로 읽음으로써 중복 반환을 방지한다. 또한, 디큐어러는 Fetch&Add 객체인 “itemTaken”을 사용해 각 아이템에 대한 독점적 소유권을 확보한다. 만약 두 디큐어러가 같은 아이템을 동시에 획득하려 하면, 하나는 실패하고 재시도하게 되며, 재시도는 동일 행(row) 내에서 최대 두 번만 발생한다는 점이 증명된다. 이러한 설계는 두 인큐어러가 동시에 같은 셀에 Swap을 수행하더라도 일관성을 유지하도록 보장한다. 논문은 알고리즘 2의 대기‑무관성을 보이는 상수 U를 정의하고, 모든 연산이 U 단계 이내에 종료함을 보인다. 선형화 가능성은 복잡한 레마 시퀀스를 통해 증명되며, 각 연산은 고유한 “loc” 좌표와 “orderpt” 타임스탬프를 기반으로 전역 순서를 정의한다. 특히, 인큐어러와 디큐어러 사이의 매칭 관계가 일대일임을 보장하는 레마 3‑9를 통해 전체 연산 집합이 선형화 가능한 순서에 정렬될 수 있음을 보인다. 이와 같이 두 인큐어러와 다수 디큐어러를 동시에 지원하면서도 대기‑무관성과 선형화를 모두 만족하는 구현을 제시함으로써, Queue가 Common2에 포함된다는 강력한 증거를 제공한다.
댓글 및 학술 토론
Loading comments...
의견 남기기