Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <Windows.h>
- using namespace std;
- /*Написать программу, запускающую два дочерних потока.Первый поток с
- помощью датчика случайных чисел заполняет элементы массива, состоящего
- из 10 чисел.После заполнения всех элементов, второй поток изменяет элементы
- массива в соответствии с заданием, указанным в соответствующем варианте.
- Вывести на экран исходный и результирующий массивы.Задание выполнить
- для трех различных массивов.Потоки синхронизировать с помощью мьютекса.
- Заменить на ноль значение элементов (кроме первого и последнего), у
- которых оба соседних элемента имеют отрицательные значения.
- */
- HANDLE hTh01, hTh02;
- int arr[10] = {1,2,3,4,5,6,7,8,9,10};
- int thread01() {
- HANDLE hMutex01 = OpenMutex(SYNCHRONIZE, FALSE, "MyMutex");
- if (hMutex01 == NULL) cout << "Open mutex01 failed" << GetLastError() << endl;
- for (int i = 0; i < 3; i++) {
- WaitForSingleObject(hMutex01, INFINITE);
- for (int j = 0; j < 10; j++) {
- arr[i] = rand();
- cout << arr[i]<< " ";
- }
- Sleep(2200);
- cout << endl;
- ReleaseMutex(hMutex01);
- } CloseHandle(hMutex01);
- return 0;
- }
- int thread02() {
- HANDLE hMutex02 = OpenMutex(SYNCHRONIZE, FALSE, "MyMutex");
- if (hMutex02 == NULL) cout << "Open mutex01 failed" << GetLastError() << endl;
- for (int i = 0; i < 3; i++) {
- WaitForSingleObject(hMutex02, INFINITE);
- for (int j = 0; j < 10; j++) {
- if (i != 1 and i != 9 and arr[i - 1] < 0 and arr[i + 1] < 0)
- {
- arr[i] = 0;
- cout << arr[i] << " ";
- }
- else cout << arr[i] << " ";
- }
- Sleep(1000);
- cout << endl;
- ReleaseMutex(hMutex02);
- } CloseHandle(hMutex02);
- return 0;
- }
- int main()
- {
- HANDLE hMutex = CreateMutex(NULL, FALSE, "MyMutex");
- if (hMutex == NULL) cout << "Create mutex failed" << GetLastError() << endl;
- DWORD IDTh01;
- hTh01 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread01, NULL, 0, &IDTh01);
- if (hTh01 == NULL) return GetLastError();
- DWORD IDTh02;
- hTh02 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread02, NULL, 0, &IDTh02);
- if (hTh02 == NULL) return GetLastError();
- cin.get();
- CloseHandle(hMutex);
- CloseHandle(hTh01);
- CloseHandle(hTh02);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement