【发布时间】:2013-12-25 19:38:29
【问题描述】:
我有以下问题:我有一个类需要保护以防止来自不同线程的同时访问。该类有两个方法:lock() 和 unlock() 使用(g_mutex_lock / g_mutex_unlock 和每个对象 GMutex)。现在锁定方法如下所示:
void Object::method()
{
lock();
// do stuff modifying the object
unlock();
}
现在假设我有两个这种类型的 mwthod,method1() 和 method2() 我一个接一个地调用它们:
object.method1();
// but what if some other thread modifies object in between
object.method2();
我尝试在此块之前锁定对象并再次解锁它,但在这种情况下
即使使用单个线程也会出现死锁,因为GMutex 不知道它已经被同一个线程锁定。一种解决方案是修改方法以接受额外的bool 以确定对象是否已被锁定。但是还有更优雅的概念吗?或者这是整体设计理念的不足?
【问题讨论】:
-
你不能使用递归互斥锁吗??
标签: c++ multithreading glib