Linux의 C에서 잠금없는 IPC로 멀티 코어 프로세서로 응용 프로그램을 작성하는 방법을 찾으려고합니다.
FIFO 또는 공유 메모리에 쓰는 프로세스 1과 프로세스 2가 있다고 가정합니다. 그런 다음 프로세스 3과 프로세스 4는 해당 공유 메모리 또는 FIFO에서 읽습니다.
잠금없는 알고리즘으로 가능합니까?
귀하의지도에 감사드립니다.
Linux의 C에서 잠금없는 IPC로 멀티 코어 프로세서로 응용 프로그램을 작성하는 방법을 찾으려고합니다.
FIFO 또는 공유 메모리에 쓰는 프로세스 1과 프로세스 2가 있다고 가정합니다. 그런 다음 프로세스 3과 프로세스 4는 해당 공유 메모리 또는 FIFO에서 읽습니다.
잠금없는 알고리즘으로 가능합니까?
귀하의지도에 감사드립니다.
답변:
링 버퍼 사용에 대한 참조를 보았고 잠금의 필요성을 제거하거나 줄이기 위해 위치 포인터에 대한 액세스를 제어했습니다. 그것은 기다릴 필요를 제거하지 않으며, 작동해야 링 버퍼에는 하나의 라이터와 하나의 리더가 있습니다. 귀하의 경우에는 적어도 두 개의 버퍼가 필요합니다.
내가 이해하는 메커니즘은 다음과 같습니다.
기록기는 마지막 입력 포인터를 업데이트합니다.
리더는 링 버퍼에 사용 가능한 항목이있을 때까지 기다립니다 (최근! = 현재).
사용 된 대기 시간에 따라 빈 대기열에 새 항목에 대한 대기 시간을 추가하거나 대기 루프에서 많은 CPU주기를 레코딩 할 수 있습니다. 이 작업을 수행하려면 포인터 업데이트 순서와 쓰기 액세스의 엄격한 분리가 중요합니다. 라이터는 리더가 사용할 수 있도록 포인터를 증가시키기 전에 링 버퍼 항목 만 쓸 수 있습니다.