Windows 환경에서 C/C++에서 프로세스 간 통신을 시도하고 있습니다.프로세스 간 뮤텍스 읽기/쓰기 잠금
공유 메모리 페이지 파일을 만들 때 두 개의 프로세스가 해당 파일의 핸들을 가져옵니다. 그것은 다음과 같습니다 :
Process1 : 공유 메모리 영역을 초기화하십시오. Process2가 그것을 채울 때까지 기다리십시오.
프로세스 2 : 공유 메모리 영역을 처리하십시오. 그것에 물건을 넣어.
나는 process1에도 명명 된 뮤텍스를 만들고 있습니다. 이제 process1은 뮤텍스를 생성 한 직후에 뮤텍스의 소유권을 획득합니다 (WaitSingleObject 사용). 분명히 메모리 영역에는 아무것도 없으므로 뮤텍스를 릴리스해야합니다. 이제 뮤텍스를 다시 얻으 려하지 않고 메모리가 가득 찰 때까지 기다려야합니다.
나는 조건 변수를 생각하고 있었다. Process2는 메모리 영역을 채우면 조건 변수에 신호를 보내고 process1은 즉시 정보를 얻습니다.
그러나 조건 변수에 대한 MS 설명서에 따라 named
이 아니기 때문에 초기화에서 명확한 프로세스간에 공유되지 않습니다.
또한 공유 메모리 영역은 주어진 순간에 하나의 요소를 보유 할 수 있습니다. 즉, process2는 프로세스 1이 정보를 추출하지 않는 한 그것을 채우고 다시 채울 수 없습니다.
주어진 설명에서 조건 변수가이 목적 (또는 모니터)에 가장 적합하다는 것은 분명합니다. 이것 주위에 방법이 있습니까?
세마포어 ......... 두 개의 semas, A, B, 0으로 초기화. P1은 A. 대기 상태로 P2가 버퍼를 채 웁니다. P2는 A 신호를 보내고 B에서 대기합니다. P1은 버퍼 데이터를 처리 한 다음 B 신호를 보내고 A는 다시 대기합니다. –
@MartinJames 나는 그것들을 사용하고 싶었지만 조건 변수처럼 작동하지 않는다. 뮤텍스는 기본적으로 카운트가 1로 설정된 세마포어입니다. 소유권을 기다리지 않고 신호를 기다려야합니다. 세마포어를 사용하면 뮤텍스를 사용하는 것처럼 소유권을 얻게됩니다. 다른 사람이 나를 알릴 때까지 소유권을 원하지 않습니다. – Everyone
'뮤텍스는 본질적으로 카운트가 1로 설정된 세마포어입니다. –