Нужно реализовать две программы, моделирующие работу
процесса-производителя и процесса-потребителя. В программах необходимо
предусмотреть вывод сообщений о взаимодействии указанных процессов
посредством работы с общими файлами, моделирующими семафоры, а также
возможность управления порядком прохождения процессов через
критические участки.
Вот код процесса-производителя:
#include <iostream>
#include <fstream>
#include <windows.h>
#include <locale>
int main() {
setlocale(LC_ALL, "rus");
HANDLE semaphore = CreateSemaphoreW(nullptr, 1, 1, L"smph");
if (semaphore == nullptr) {
std::cout << "Не удалось создать семафор" << std::endl;
return 1;
}
std::ofstream log_file("C:\\Users\\e1p\\log.txt"); // путь к файлу для записи рез-ов "42"
WaitForSingleObject(semaphore, INFINITE);
int element = 42;
log_file << element << std::endl;
std::cout << "Процесс-производитель произвел элемент " << element << std::endl;
ReleaseSemaphore(semaphore, 1, nullptr);
log_file.close();
CloseHandle(semaphore);
return 0;
}
Вот код процесса-потребителя:
#include <iostream>
#include <fstream>
#include <windows.h>
#include <locale>
#include <string>
int main() {
setlocale(LC_ALL, "rus");
HANDLE semaphore = OpenSemaphoreW(SEMAPHORE_ALL_ACCESS, FALSE, L"smph");
GetLastError();
if (semaphore == nullptr) {
std::cout << "Не удалось открыть семафор" << std::endl;
return 1;
}
std::ifstream log_file("C:\\Users\\e1p\\log.txt"); // путь к файлу для чтения рез-ов
WaitForSingleObject(semaphore, INFINITE);
std::string element_str;
std::getline(log_file, element_str);
int element = std::stoi(element_str);
std::cout << "Процесс-потребитель получил элемент " << element << std::endl;
ReleaseSemaphore(semaphore, 1, nullptr);
log_file.close();
CloseHandle(semaphore);
return 0;
}
При запуске процесса-потребителя не удается открыть семафор.
В чем проблема?