我有一个不是线程保存的数据结构。多个线程在两个方法中对该数据结构进行读写。(调用的顺序是相当随机的)我解决这个问题的方法是使用如下所示的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;
}但是,使用这段代码时,一次只允许一个线程访问数据,因为互斥是在两个方法之间共享的。
但不知何故,程序可能会在数据结构中触发一个bug,而我无法在单线程测试用例中重现这个bug……
我是否必须在两个方法中都使用boost::unique_lock,然后调用
lock()
unlock()在上面吗?
发布于 2016-08-01 23:07:57
如上所述,锁定机制不是bug的原因。
好吧,实际上是这样的;)
在我调用的临界区之外
datastructure.empty()因为在早期版本中,这个方法是threadsave。
感谢"Kerrek SB“在thread-sanitizer,上指出,因为它的输出引导我找到了这个bug。
https://stackoverflow.com/questions/38692641
复制相似问题