我的数据结构不是线程保存的。多个线程以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()
吗?
答案 0 :(得分:0)
datastructure.empty()
因为在早期版本中,此方法是 threadsave。
感谢“Kerrek SB”指向线程消毒器,因为它的输出引导我查看错误。