Добавил:
Andrew1992
Факультет ИКСС, группа ИКВТ-61
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
// Пример синхронизации потоков, выполняющихся
// в разных процессах, с использованием мьютекса
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
HANDLE hMutex;
LPCWSTR appName = TEXT("C:\\Users\\hitma\\OneDrive\\ROOT\\SPSUT\\OPERATING SYSTEMS\\LAB\\WORK_8\\meta\\01\\child.exe");
STARTUPINFO si;
PROCESS_INFORMATION pi;
// создаем мьютекс
hMutex = CreateMutex(nullptr, FALSE, TEXT("DemoMutex"));
if (hMutex == nullptr)
{
printf("CreateMutex error: %d\n", static_cast<int>(GetLastError()) );
printf("\nPress any key to exit.");
cin.get();
return 0;
}
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
// создаем новый консольный процесс
if (!CreateProcess(appName, nullptr, nullptr, nullptr, FALSE,
0, nullptr, nullptr, &si, &pi))
{
printf("CreateProcess error: %d\n", static_cast<int>(GetLastError()) );
cout << "Press any key to exit." << endl;
cin.get();
}
// выводим на экран строки
for (int j = 0; j < 10; j++)
{
// захватываем мьютекс
WaitForSingleObject(hMutex, INFINITE);
for (int i = 0; i < 10; i++)
{
cout << j << ' ';
cout.flush();
Sleep(100);
}
cout << endl;
// освобождаем мьютекс
ReleaseMutex(hMutex);
}
// закрываем дескриптор мьютекса
CloseHandle(hMutex);
// ждем пока дочерний процесс закончит работу
WaitForSingleObject(pi.hProcess, INFINITE);
// закрываем дескрипторы дочернего процесса в текущем процессе
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return 0;
}