是否有线程安全类成员变量的C++语言功能?快速搜索或两个都没有透露,但我认为这很简单,并提出了这个解决方案。是否有线程安全类变量的C++标准?
template <class T>
class ThreadSafeVar
{
private:
T safeVar;
std::mutex accessMutex;
public:
ThreadSafeVar(T initialValue) { safeVar = initialValue; }
ThreadSafeVar<T>& operator=(const T &source) { set(source); return *this; }
ThreadSafeVar<T>& operator=(ThreadSafeVar<T> &source) { set(source.get()); return *this; };
void set(T newValue)
{
std::lock_guard<std::mutex> lock(accessMutex);
safeVar = newValue;
};
T const get(void)
{
std::lock_guard<std::mutex> lock(accessMutex);
return safeVar;
};
};
此解决方案是否有任何问题(可能的死锁等)? C++是否已经有了这样的方法?
对于TriviallyCopyable类型,std :: atomic提供了set,get和exchange方法。 –