Guest User

Untitled

a guest
Dec 15th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <thread>
  4. #include <Windows.h>
  5. using namespace std;
  6.  
  7. const int nThreads = 2;
  8. HANDLE mutex;
  9. HANDLE threads[nThreads];
  10.  
  11. class Num {
  12. public:
  13.     Num():
  14.         num(0) { }
  15.     int Get() const { return num; }
  16.     void Set(int n) { num = n; }
  17.  
  18. private:
  19.     int num;
  20. };
  21.  
  22. Num num;
  23.  
  24. void threadFunc()
  25. {
  26.     for (int i = 0; i < 100; ++i) {
  27.         WaitForSingleObject(mutex, INFINITE);
  28.         int n = num.Get();
  29.         ++n;
  30.         num.Set(n);
  31.         ReleaseMutex(mutex);
  32.     }
  33. }
  34.  
  35. int main()
  36. {
  37.     int x;
  38.     while (cin >> x)
  39.     {
  40.         DWORD ThreadID;
  41.         mutex = CreateMutex(NULL, FALSE, (LPCWSTR)"mutexos");
  42.         for (int i = 0; i < nThreads; ++i)
  43.             threads[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) threadFunc, NULL, 0, &ThreadID);
  44.  
  45.         WaitForMultipleObjects(nThreads, threads, TRUE, INFINITE);
  46.  
  47.         for (int i = 0; i < nThreads; ++i)
  48.             CloseHandle(threads[i]);
  49.         CloseHandle(mutex);
  50.         cout << "Result " << num.Get() << endl;
  51.     }
  52.     system("pause");
  53.     return 0;
  54. }
Add Comment
Please, Sign In to add comment