Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. using namespace std;
  4. /*Написать программу, запускающую два дочерних потока.Первый поток с
  5. помощью датчика случайных чисел заполняет элементы массива, состоящего
  6. из 10 чисел.После заполнения всех элементов, второй поток изменяет элементы
  7. массива в соответствии с заданием, указанным в соответствующем варианте.
  8. Вывести на экран исходный и результирующий массивы.Задание выполнить
  9. для  трех  различных  массивов.Потоки  синхронизировать  с  помощью мьютекса.
  10. Заменить на ноль значение элементов (кроме первого и последнего), у
  11. которых оба соседних элемента имеют отрицательные значения.
  12. */
  13. HANDLE hTh01, hTh02;
  14. int arr[10] = {1,2,3,4,5,6,7,8,9,10};
  15. int thread01() {
  16.     HANDLE hMutex01 = OpenMutex(SYNCHRONIZE, FALSE, "MyMutex");
  17.     if (hMutex01 == NULL)  cout << "Open mutex01 failed" << GetLastError() << endl;
  18.     for (int i = 0; i < 3; i++) {
  19.         WaitForSingleObject(hMutex01, INFINITE);
  20.         for (int j = 0; j < 10; j++) {  
  21.             arr[i] = rand();
  22.             cout << arr[i]<< " ";
  23.     }
  24.         Sleep(2200);
  25.         cout << endl;    
  26.         ReleaseMutex(hMutex01);  
  27.     } CloseHandle(hMutex01);
  28.     return 0;
  29. }
  30.  
  31. int thread02() {
  32.     HANDLE hMutex02 = OpenMutex(SYNCHRONIZE, FALSE, "MyMutex");
  33.     if (hMutex02 == NULL)  cout << "Open mutex01 failed" << GetLastError() << endl;
  34.     for (int i = 0; i < 3; i++) {
  35.         WaitForSingleObject(hMutex02, INFINITE);
  36.         for (int j = 0; j < 10; j++) {
  37.             if (i != 1 and i != 9 and arr[i - 1] < 0 and arr[i + 1] < 0)
  38.             {
  39.                 arr[i] = 0;
  40.                 cout << arr[i] << " ";
  41.             }
  42.             else cout << arr[i] << " ";
  43.         }
  44.         Sleep(1000);
  45.         cout << endl;
  46.         ReleaseMutex(hMutex02);  
  47.     } CloseHandle(hMutex02);
  48.     return 0;
  49. }
  50.  
  51. int main()
  52. {
  53.     HANDLE hMutex = CreateMutex(NULL, FALSE, "MyMutex");
  54.     if (hMutex == NULL)    cout << "Create mutex failed" << GetLastError() << endl;
  55.     DWORD  IDTh01;
  56.     hTh01 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread01, NULL, 0, &IDTh01);
  57.     if (hTh01 == NULL) return GetLastError();
  58.     DWORD  IDTh02;
  59.     hTh02 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread02, NULL, 0, &IDTh02);
  60.     if (hTh02 == NULL) return GetLastError();
  61.     cin.get();
  62.     CloseHandle(hMutex);
  63.     CloseHandle(hTh01);
  64.     CloseHandle(hTh02);
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement