почему родительский и дочерний процесс вроде одновременно открывают один и тот же мьютекс? ОС windows

код:

РОДИТЕЛЬ:

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"

HANDLE M1,M2,M3,M4,M5,MM;
STARTUPINFO startupinfo1,startupinfo2,startupinfo3,startupinfo4,startupinfo5;
PROCESS_INFORMATION processinfo1,processinfo2,processinfo3;

int main()
{

//для начала делаем мьютексы
M1 = CreateMutex(NULL, TRUE, _T("Mutex1"));
if(M1!=0) printf("main: mutex1 has been created, ID = %dn", M1);
else printf("ошибка при создании mutex1n");  //должен вернуть ид объекта
M2 = CreateMutex(NULL, TRUE, _T("Mutex2"));
if(M2!=0) printf("main: mutex2 has been created, ID = %dn", M2);
else printf("ошибка при создании mutex2n");
M3 = CreateMutex(NULL, TRUE, _T("Mutex3"));
if(M3!=0) printf("mutex3 has been createdn");
else printf("ошибка при создании mutex3n");

//M1 = OpenMutex(MUTEX_ALL_ACCESS, 1, _T("Mutex1"));
DWORD waitingstat = NULL;
   WaitForSingleObject(M1, INFINITE);
if(waitingstat == WAIT_OBJECT_0)
{
 M1 = OpenMutex(SYNCHRONIZE, 1, _T("Mutex1"));
     if(M1!= 0) printf("main: opened mutex1, id = %dn", M1);
     else printf("main: failed to open mutex1n", M1);
}

//обнуляем структуры перед вызовом процессов
   ZeroMemory( &startupinfo1, sizeof(startupinfo1) );
startupinfo1.cb = sizeof(startupinfo1);
ZeroMemory( &processinfo1, sizeof(processinfo1) );

int succ = CreateProcess( _T("C:\Users\bukva-ziu\Desktop\myMultitasking\multitaskingWin\Debug\power.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &startupinfo1, &processinfo1);
//printf("%d", succ);

//TerminateProcess(processinfo1.hProcess, 10);
WaitForSingleObject(processinfo1.hProcess,INFINITE);
printf("child exitedn");
CloseHandle(processinfo1.hProcess);
   CloseHandle(processinfo1.hThread);

getch();
return 0;
}

РЕБЕНОК:

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"

HANDLE M1;
DWORD waitingstat;

int _tmain(int argc, _TCHAR* argv[])
{
printf("power launched!n");

WaitForSingleObject(M1, INFINITE);
if(waitingstat == WAIT_OBJECT_0)
{
M1 = OpenMutex(SYNCHRONIZE, 1, _T("Mutex1"));
if(M1!= 0) printf("power: opened mutex1, id = %dn", M1);
else printf("power: failed to open mutex1n", M1);
}
return 0;
}

1 комментарий

  • Потому что запускается по умолчанию в том же пространстве, запусти чисто как отдельный процесс и все будет норм.