2010-03-05 4 views
1

내가 두 개의 프로세스가 있습니다MacOSX에서는 C++에서 스핀 록없이 공유 메모리를 통해 프로세스 간 통신을 수행하는 방법은 무엇입니까?

Producer 
and 
Consumer 

그들이 지금

Memory 

메모리

의 일반적 mmaped 공유 영역을 가지고, 생산자는 메모리에 물건을 씁니다. 소비자는 메모리에서 물건을 읽습니다.

I would prefer Consumer not to spin wait with Memory is empty. 
I would prefer Producer not to spin wait when Memory is full. 

어떻게하면됩니까?

답변

0

뮤텍스 사용은 어떻습니까? 리소스가 사용 가능할 때까지 뮤텍스는 잠자기 상태가되므로 스핀 대기 문제는 발생하지 않습니다.

0

이것은 Dining Philosophers Problem 연상시킨다. 플랫폼에서 지원하는 경우 복수 프로세스에서 condition variables 공유 할 수 있습니다. 이러한 공유 조건 변수로 데이터를 사용할 수있을 때 당신의 ProducerMemory을 읽도록 Consumer 신호 수 있으며, Memory가 비어 그 반대의 경우. spurious wakeup을 확인하십시오.

당신은에서라도의 pthread 구현 프로세스에서 공유 조건 변수를 지원하는지 확인해야합니다 것입니다. 방법을 확인하려면 my answer to your mutex related question을 참조하십시오. 답은 조건 변수에도 적용됩니다.