2 개의 프로세스가 있습니다. 첫 번째 작업은 다른 작업으로 일부 데이터를 보내고 각 작업을 동기화합니다. 는 실제로 다음과 같은 데이터를 전송 :뮤텍스가 C++을 동기화하지 않습니다
Process : A sends 1
Process : B receives 1
Process : A sends 2
Process : B receives 2
문제는 그 나는 처음부터 모든 데이터를 전송하는 프로세스 A를 실행하고 나는 무언가 같이 볼 때 : 나는대로했다
Process : A sends 1
Process : A sends 2
Process : A sends 3
Process : B receives 3
다음
Process A
HANDLE mutex;
mutex = CreateMutex(NULL, FALSE, TEXT("mutex1"));
if (mutex == INVALID_HANDLE_VALUE) {
_tprintf(TEXT("Create mutex error !.\n"), GetLastError());
return 1;
}
for (int i = 0; i < sender_length;i++) {
WaitForSingleObject(mutex,INFINITE);
sendToB(data);
ReleaseMutex(mutex);
}
CloseHandle(mutex);
그리고 B 과정은 다음과 같습니다 :
Process B:
HANDLE mutex;
mutex = OpenMutex(SYNCHRONIZE, FALSE, TEXT("mutex1"));
if (mutex == INVALID_HANDLE_VALUE) {
_tprintf(TEXT("Mutex error ! \n"), GetLastError());
return 1;
}
for (int i = 0; i < sender_length;i++) {
WaitForSingleObject(mutex,INFINITE);
receiveFromA(data);
ReleaseMutex(mutex);
}
CloseHandle(mutex);
동기화하려는 코드 안에 뮤텍스를 만들지 마십시오. –
뮤텍스의 정신 모형에 오류가있는 것 같습니다. 뮤텍스가 당신이 생각하는 것처럼 보이지 않는다고 말하는 것 이외에는 대답 할 수없는 질문은 여기에 있습니다. –
뮤텍스는 한 번에 하나만 저장할 수 있다고 말합니다. 다양한 참가자가 그것을 습득하는 순서에 대해서는 아무 것도 말하지 않습니다. 당신이 묘사 한 것은 이것의 완벽하게 유효한 결과입니다. 아마 어떤 종류의 대기열을 원할 것입니다. – GManNickG