【发布时间】:2015-11-12 15:21:48
【问题描述】:
大多数时候我在代码中看到线程安全 getter 方法的这种实现的一些变体:
class A
{
public:
inline Resource getResource() const
{
Lock lock(m_mutex);
return m_resource;
}
private:
Resource m_resource;
Mutex m_mutex;
};
假设类 Resource 不能被复制,或者复制操作的计算成本太高,C++ 中有没有办法避免返回副本但仍然使用 RAII 风格的锁定机制?
【问题讨论】:
-
您使用的是哪个 C++ 版本?
-
“有没有办法避免退回副本”是的,根本不退回。
-
返回
const Resource&? -
@cad 那不是线程安全的
-
@cad 返回引用的问题是,在通过 RAII 调用 getResource 后锁被破坏,现在获得该引用的任何人都可以访问 m_resource 而不会锁定资源。
标签: c++ multithreading locking getter raii