Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <thread>
- #include <Windows.h>
- using namespace std;
- const int nThreads = 2;
- HANDLE mutex;
- HANDLE threads[nThreads];
- class Num {
- public:
- Num():
- num(0) { }
- int Get() const { return num; }
- void Set(int n) { num = n; }
- private:
- int num;
- };
- Num num;
- void threadFunc()
- {
- for (int i = 0; i < 100; ++i) {
- WaitForSingleObject(mutex, INFINITE);
- int n = num.Get();
- ++n;
- num.Set(n);
- ReleaseMutex(mutex);
- }
- }
- int main()
- {
- int x;
- while (cin >> x)
- {
- DWORD ThreadID;
- mutex = CreateMutex(NULL, FALSE, (LPCWSTR)"mutexos");
- for (int i = 0; i < nThreads; ++i)
- threads[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) threadFunc, NULL, 0, &ThreadID);
- WaitForMultipleObjects(nThreads, threads, TRUE, INFINITE);
- for (int i = 0; i < nThreads; ++i)
- CloseHandle(threads[i]);
- CloseHandle(mutex);
- cout << "Result " << num.Get() << endl;
- }
- system("pause");
- return 0;
- }
Add Comment
Please, Sign In to add comment