리눅스에서 공유 메모리를 사용하는 두 개 이상의 프로세스간에 데이터를 교환하는 메커니즘을 개발 중입니다. 문제는 공유 메모리 자체에서 데이터 무결성을 유지하는 데 필요한 몇 가지 수준의 동시성 제어입니다. 언젠가 또는 다른 프로세스가 죽거나 충돌 할 수 있다고 생각하면서 일반적인 잠금 메커니즘은 메모리를 남겨 둘 수 있기 때문에 작동하지 않습니다. "잠긴"상태이고 죽은 직후에 다른 프로세스가 잠금 장치가 해제 될 때까지 대기하는 상태로 만듭니다.공유 메모리 일관성을위한 잠금 메커니즘
그래서 몇 가지 연구를 통해 System V 세마포어에 SEM_UNDO 플래그가있어 프로그램이 실패 할 때 잠금 상태를 되돌릴 수 있다는 것을 알았지 만 작동하지는 않습니다. 또 다른 옵션은 공유 메모리를 사용할 수있는 모든 프로세스에서 PID를 모니터링하고 문제가 발생할 경우이를 제어합니다.하지만 이것이 내 문제에 대한 올바른 접근 방법인지 확실하지 않습니다.
어떤 아이디어 ?? :)
편집 : 설명을 위해, 우리의 애플 리케이션은 가능한 가장 작은 대기 시간과 일종의 IPC 메커니즘이 필요합니다. 그래서 저는이 요구 사항을 처리 할 수있는 메커니즘에 대해서도 개방적입니다.
또 다른 대안은 공유 메모리를 사용하지 않는 것입니다. 프로그래머들에게 끔찍한 매혹을 안겨주는 것을 결코 이해하지 못했습니다. 다른 IPC 메카니즘들 (공유 메모리에 사전 빌드되고 테스트 된 것들)이 많이 있습니다. 그래서 그들을 사용하지 않으시겠습니까? –
성능 향상을 위해. 우리의 애플리케이션은 마이크로 초 대기 시간 동안 작동해야합니다. 이 성능을 달성 할 수있는 IPC 메커니즘이 있습니까? – scooterman
@scooterman 어떤 실시간 리눅스 버전을 사용하고 있습니까? –