Advertisement
Guest User

Untitled

a guest
Oct 10th, 2022
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.63 KB | None | 0 0
  1. template<class T>
  2.   class ThreadSafeObject
  3.   {
  4.   public:
  5.     class WithLock
  6.     {
  7.     public:
  8.       WithLock(ThreadSafeObject<T> *tsobj)
  9.         : tsobj_(tsobj)
  10.       {
  11.         tsobj_->mx_.lock();
  12.       }
  13.  
  14.       ~WithLock()
  15.       {
  16.         tsobj_->mx_.unlock();
  17.       }
  18.  
  19.       T& operator*() { return tsobj_->obj_; }
  20.       T* operator->() { return &tsobj_->obj_; }
  21.    
  22.     private:
  23.       ThreadSafeObject<T> *tsobj_;
  24.     }
  25.  
  26.     WithLock withLock()
  27.     {
  28.       return WithLock(this);
  29.     }
  30.  
  31.     T& operator*() { return obj_; }
  32.     T* operator->() { return &obj_; }
  33.  
  34.   private:
  35.     T obj_;
  36.     std::mutex mx_;
  37.   };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement