考虑以下 C++ 成员函数:
size_t size() const
{
boost::lock_guard<boost::mutex> lock(m_mutex);
return m_size;
}
这里的目的不是同步对私有成员变量的访问m_size
,而是确保调用者收到 m_size 的有效值。目标是防止函数m_size
在其他线程正在修改的同时返回m_size
。
但是调用这个函数是否有任何潜在的竞争条件?我不确定这里的 RAII 样式锁是否足以防止竞争条件。假设在函数的返回值被压入堆栈之前调用了锁的析构函数?
我是否需要执行以下操作来保证线程安全?
size_t size() const
{
size_t ret;
{
boost::lock_guard<boost::mutex> lock(m_mutex);
ret = m_size;
}
return ret;
}