Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. #include <iostream>
  2. #include <mutex>
  3. #include <condition_variable>
  4. #include <thread>
  5. #include <unistd.h>
  6.  
  7. using namespace std;
  8.  
  9. template <typename Type_>
  10. struct buffer {
  11. virtual ~buffer() {}
  12.  
  13. virtual void put(Type_&) = 0;
  14.  
  15. virtual Type_ get(void) = 0;
  16. };
  17.  
  18. template <typename Type_>
  19. class continuous_read_buffer : public buffer<Type_> {
  20. public:
  21. explicit continuous_read_buffer(const Type_& default_val)
  22. : element_{default_val}
  23. , mtx_{}
  24. {
  25. }
  26.  
  27. void put(Type_& element) override {
  28. lock_guard<mutex> lock__(mtx_);
  29. element_ = element;
  30. }
  31.  
  32. Type_ get(void) override {
  33. lock_guard<mutex> lock__(mtx_);
  34. return element_;
  35. }
  36.  
  37. private:
  38. Type_ element_;
  39. mutex mtx_;
  40. };
  41.  
  42. class Element {
  43. public:
  44. Element(int i):i_(i){cout<<"Element with value "<< i_ << " created"<<endl;}
  45. ~Element(){cout<<"Element with value "<< i_ << " destroyed"<<endl;}
  46.  
  47. private:
  48. int i_;
  49. };
  50.  
  51. class Consumer {
  52. public:
  53. explicit Consumer(continuous_read_buffer<Element>& crb) : crb_(crb){}
  54. continuous_read_buffer<Element>& crb_;
  55. void operator()() {
  56.  
  57. while(true){
  58. usleep(250000);
  59. Element e = crb_.get();
  60. }
  61. }
  62. };
  63.  
  64. class Producer {
  65. public:
  66. explicit Producer(continuous_read_buffer<Element>& crb) : crb_(crb){}
  67. continuous_read_buffer<Element>& crb_;
  68. void operator()() {
  69. int i = 0;
  70. while(true){
  71. usleep(500000);
  72. Element e(i);
  73. crb_.put(e);
  74. i++;
  75. }
  76. }
  77. };
  78. int main() {
  79.  
  80. continuous_read_buffer<Element> crb(0);
  81. thread ConsumerThread( (Consumer(crb)) );
  82. thread ProducerThread( (Producer(crb)) );
  83. ProducerThread.join();
  84. ConsumerThread.join();
  85.  
  86.  
  87.  
  88. return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement