c++跨方法锁定
c++ lock across methods
我有一个不是线程保存的数据结构。多个线程正在用两种方法读取和写入该数据结构。(调用的顺序相当随机)我解决这个问题的方法是使用如下所示的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"指向线程清理程序,因为它的输出引导我找到了错误。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在这种情况下,有什么正确的方法可以实现锁定吗?
- 当被调用方法使用调用方已锁定的同一锁时,如何避免死锁
- 从C 中的Mutex锁定代码中的函数返回的好方法
- C++与双重检查锁定的危险:变通方法
- 通过私有互斥锁锁定对象的最佳方法是什么
- C++应用程序多线程中的锁定方法
- 锁定多个 std::mutex 的最佳方法是什么?
- 锁定std::list的有效方法
- 为什么TMutex方法Acquire()不锁定互斥对象?
- c++跨方法锁定
- 有什么方法可以通过Qt锁定除一个表单外的所有表单吗
- 在Linux上锁定对单个进程内数据访问的最快方法
- 这是一个好方法来锁定一个每秒60次循环的循环吗?