-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConcurrency.h
37 lines (31 loc) · 1.14 KB
/
Concurrency.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#ifndef CONCURRENCY
#define CONCURRENCY
#endif // !CONCURRENCY
#include <mutex>
#include <atomic>
#include <functional>
#include <condition_variable>
class ConcurrencyPractice
{
public:
ConcurrencyPractice() = default;
ConcurrencyPractice(const int val) : m_length(val), m_numberState(0){}
ConcurrencyPractice(const ConcurrencyPractice& rhs) = default;
ConcurrencyPractice(ConcurrencyPractice&& rhs) = default;
ConcurrencyPractice& operator=(const ConcurrencyPractice& rhs) = default;
ConcurrencyPractice& operator=(ConcurrencyPractice&& rhs) = default;
~ConcurrencyPractice() = default;
void first(std::function<void()> printFirst);
void second(std::function<void()> printSecond);
void third(std::function<void()> printThird);
void printZero(std::function<void(int)> printNumber);
void printEven(std::function<void(int)> printNumber);
void printOdd(std::function<void(int)> printNumber);
private:
std::mutex m_mtx;
std::condition_variable m_cond;
int m_cnt = 1;
int m_length = 0;
//std::atomic<size_t> m_numberState;
int m_numberState = 0;
};