小编Cha*_*l72的帖子

同步对返回值的访问

考虑以下C++成员函数:

 size_t size() const
 {
    boost::lock_guard<boost::mutex> lock(m_mutex);
    return m_size;
 }
Run Code Online (Sandbox Code Playgroud)

这里的目的不是同步对私有成员变量的访问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;
 }
Run Code Online (Sandbox Code Playgroud)

c++ multithreading thread-safety boost-thread

14
推荐指数
1
解决办法
1563
查看次数

标签 统计

boost-thread ×1

c++ ×1

multithreading ×1

thread-safety ×1