Привет всем!
#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?