parent
2d047aae7e
commit
1a80cb3bc2
1 changed files with 0 additions and 35 deletions
@ -1,35 +0,0 @@ |
|||||||
#ifndef CHANNEL_HPP |
|
||||||
#define CHANNEL_HPP |
|
||||||
|
|
||||||
#include <mutex> |
|
||||||
#include <list> |
|
||||||
#include <condition_variable> |
|
||||||
|
|
||||||
template<class item> |
|
||||||
class channel { |
|
||||||
private: |
|
||||||
std::list<item> queue; |
|
||||||
std::mutex m; |
|
||||||
std::condition_variable cv; |
|
||||||
public: |
|
||||||
void put(const item &i) { |
|
||||||
std::unique_lock<std::mutex> lock(m); |
|
||||||
queue.push_back(i); |
|
||||||
cv.notify_one(); |
|
||||||
} |
|
||||||
void put_front(const item &i) { |
|
||||||
std::unique_lock<std::mutex> lock(m); |
|
||||||
queue.push_front(i); |
|
||||||
cv.notify_one(); |
|
||||||
} |
|
||||||
item get() { |
|
||||||
std::unique_lock<std::mutex> lock(m); |
|
||||||
cv.wait(lock, [&](){ return !queue.empty(); }); |
|
||||||
item result = queue.front(); |
|
||||||
queue.pop_front(); |
|
||||||
return result; |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
||||||
|
|
Loading…
Reference in new issue