首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨方法的c++锁

跨方法的c++锁
EN

Stack Overflow用户
提问于 2016-08-01 14:53:54
回答 1查看 169关注 0票数 1

我有一个不是线程保存的数据结构。多个线程在两个方法中对该数据结构进行读写。(调用的顺序是相当随机的)我解决这个问题的方法是使用如下所示的unique_lock:

代码语言:javascript
复制
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;
}

但是,使用这段代码时,一次只允许一个线程访问数据,因为互斥是在两个方法之间共享的。

但不知何故,程序可能会在数据结构中触发一个bug,而我无法在单线程测试用例中重现这个bug……

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

代码语言:javascript
复制
lock()
unlock()

在上面吗?

EN

回答 1

Stack Overflow用户

发布于 2016-08-01 23:07:57

如上所述,锁定机制不是bug的原因。

好吧,实际上是这样的;)

在我调用的临界区之外

代码语言:javascript
复制
datastructure.empty()

因为在早期版本中,这个方法是threadsave。

感谢"Kerrek SB“在thread-sanitizer,上指出,因为它的输出引导我找到了这个bug。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38692641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档