我有2个进程。第一个将一些数据发送给另一个,同步每一步。 实际发送的数据如下:Mutex不同步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