Java의 잠금 해제 대기열 구현을 this 게시에 따라 확장하려고합니다.Java의 lock-free 및 크기 제한 대기열
내 구현에는 원자 변수/참조 만 사용하도록 제한되어 있습니다. 내 대기열에 최대 크기가 있어야합니다. 따라서 putObject()는 큐가 가득 차면 차단해야하고 큐가 비어 있으면 getObject()가 필요합니다.
현재 잠금 장치를 사용하지 않고이를 해결하는 방법을 모르겠습니다.
예를 들어 AtomicInteger를 사용할 때 수정 작업은 원자 적입니다. 그러나 putObject() 및 getObject()에서 check-and-modify-situation을 처리해야한다는 문제가 여전히 남아 있습니까? 그래서 현재 대기열 크기를 확인한 후에 대기열에있는 스레드가 중단되는 상황이 여전히 존재합니다.
현재 내 제한 사항으로이 문제를 해결할 수 있습니까?
그것은 일반적으로 링 버퍼를 이용하여 해결하는 매우 일반적인 문제
대기열이 가득 차면 (비어 있음) Disruptor가 차단됩니까? –
@Alexei AFAIK, 조건을 만족할 때까지 차단, 회전, 주차, 항복 등의 다양한 "대기 전략"을 사용합니다. – CaptainHastings