跨方法的c ++锁定

时间:2016-08-01 06:53:54

标签: c++ multithreading boost locking

我的数据结构不是线程保存的。多个线程以2种方法读取和写入该数据结构。 (调用的顺序相当随机)我遇到这个问题的方法是使用如下所示的unique_lock:

struct test {

  void func1() {
    boost::unique_lock<boost::mutex> lock(_mutex);
    // modify data-structure
  }


  void func2() {
    boost::unique_lock<boost::mutex> lock(_mutex);  
    // modify data-structure
  }

   boost::mutex _mutex;
}

我认为,使用此代码,一次只允许一个线程访问数据,因为互斥锁在两种方法之间共享。
但不知何故,程序可能触发数据结构中的错误,我无法在单线程测试用例中重现......

我是否必须在两种方法中使用boost :: unique_lock然后调用

lock()
unlock()

吗?

1 个答案:

答案 0 :(得分:0)

如上所述,锁定机制不是导致错误的原因 嗯,实际上是;) 在关键部分之外,我打电话给

datastructure.empty()

因为在早期版本中,此方法 threadsave。

感谢“Kerrek SB”指向线程消毒器,因为它的输出引导我查看错误。