c++跨方法锁定

c++ lock across methods

本文关键字:锁定 方法 c++      更新时间:2023-10-16

我有一个不是线程保存的数据结构。多个线程正在用两种方法读取和写入该数据结构。(调用的顺序相当随机)我解决这个问题的方法是使用如下所示的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()

在上面?

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

datastructure.empty()

因为在早期版本中,此方法线程保存。

感谢"Kerrek SB"指向线程清理程序,因为它的输出引导我找到了错误。