멀티 코어 프로세서를위한 Linux의 잠금없는 IPC


9

Linux의 C에서 잠금없는 IPC로 멀티 코어 프로세서로 응용 프로그램을 작성하는 방법을 찾으려고합니다.

FIFO 또는 공유 메모리에 쓰는 프로세스 1과 프로세스 2가 있다고 가정합니다. 그런 다음 프로세스 3과 프로세스 4는 해당 공유 메모리 또는 FIFO에서 읽습니다.

잠금없는 알고리즘으로 가능합니까?

귀하의지도에 감사드립니다.


잠금없는 통신에 대한 일부 표시 또는 일부 외부 문서에 대한 참조를 제공 할 수 있습니까? 이 용어의 의미는 무엇입니까?
Giorgio


올바르게 이해하면 문제는 동시 쓰기 (1, 2)와 동시 읽기 (3, 4)입니다. 라이터와 리더 사이의 동기화는 이미 링크 된 페이지에 설명 된 알고리즘에 포함되어 있습니다.
Giorgio

답변:


2

링 버퍼 사용에 대한 참조를 보았고 잠금의 필요성을 제거하거나 줄이기 위해 위치 포인터에 대한 액세스를 제어했습니다. 그것은 기다릴 필요를 제거하지 않으며, 작동해야 링 버퍼에는 하나의 라이터와 하나의 리더가 있습니다. 귀하의 경우에는 적어도 두 개의 버퍼가 필요합니다.

내가 이해하는 메커니즘은 다음과 같습니다.

  • 라이터는 열린 슬롯이있을 때까지 대기합니다 (last + 1! = current).
  • 기록기는 링 버퍼에 항목을 씁니다.
  • 기록기는 마지막 입력 포인터를 업데이트합니다.

  • 리더는 링 버퍼에 사용 가능한 항목이있을 때까지 기다립니다 (최근! = 현재).

  • 리더는 항목을 처리합니다.
  • 리더는 현재 포인터를 증가시킵니다.

사용 된 대기 시간에 따라 빈 대기열에 새 항목에 대한 대기 시간을 추가하거나 대기 루프에서 많은 CPU주기를 레코딩 할 수 있습니다. 이 작업을 수행하려면 포인터 업데이트 순서와 쓰기 액세스의 엄격한 분리가 중요합니다. 라이터는 리더가 사용할 수 있도록 포인터를 증가시키기 전에 링 버퍼 항목 만 쓸 수 있습니다.


그리고 나는 이것을 위키 백과에서도 찾았습니다. 흥미롭게 보였지만 concurrencykit.org를 통해
poly

1

네 가능합니다. 우리는 프로젝트에서 잠금없는 큐 알고리즘 중 하나를 사용합니다. 그러나 이러한 알고리즘은 실제로 명확하지 않습니다. 당신이 그들을 깊이 이해하려면 몇 개월을 보낼 준비가되어 있어야합니다.


0

프로세스 간 통신에는 잠금이 없어야합니다. 스레드 간만. 내가 아는 한


"자유 잠금"은 사용자가 아닌 메커니즘의 속성이라고 생각합니다. 공유 메모리와 같은 것을 믹스에 추가하면 스레드와 프로세스의 차이가 매우 얇아집니다.
tylerl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.