Thread-safe доступ и модификация
От: Максим Рогожин Россия  
Дата: 01.06.18 17:56
Оценка:
Привет всем!

#include "Data1.h";
#include "Data2.h";

class SomeClass {
   Data1 m_data1;
   Data2 m_data2;
   std::mutex m_mutex2; // for m_data2
public:
   const Data1& get1() const { retrun data1; }       // НЕ потокобезопасно?
   void set1(const Data1& data) { m_data1 = data1; }

   Data2 get2() const {                              // потокобезопасно?   
      std::lock_guard<mutex> locker(m_mutex2);
      return m_data2;
   }

   void set2(Data2 data2) {                          // потокобезопасно?
      std::lock_guard<mutex> locker(m_mutex2);
      m_data2 = data2;
   }
};


У объясните, пожалуйста
1. Являются ли get1/set1 потокобезопасными? Мой ответ Нет.
2. Гарантирует ли стандарт, что в методе get2() сначала вызовется конструктор копирования Data2(const Data2&) и только после него выполнится деструктор ~lock_guard()?
3. Метод get2() всегда делает lock и unlock, даже если метод set2() вообще не вызывался, это не эффективно. Можно ли как-то оптимизировать get2/set2?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.