我有两个QMutex对象,我需要将它们都锁定,erase()
方法。但顺序并不重要。
所以,现在我在等待一个QMutex处于解锁状态(QMutexLocker locker(&listMutex)
)状态,并且比我等待另一个(QMutexLocker locker(&writeMutex)
)。
但它会更有效率地等待解锁第一个互斥锁。而不是等待另一个。等待时间会比较短。
怎么可能实现这样的行为?
我应该创建额外的递归QMutex或QSemaphore,并将QMutex的状态与这个新对象同步,而不是等待我的QMutex,而是等待这个新对象。
这应该可以工作,但也许没有复制QMutex对象更容易一些吗?等待第一个解锁的QMutex如果QMutex很少
class MyQThread:
public: QThread
{
...
QList<QString> list;
QString string;
QMutex listMutex;
QMutex writeMutex;
}
void MyQThread::erase()
{
QMutexLocker locker(&listMutex);
list.clear();
QMutexLocker locker(&writeMutex);
string.clear();
}
void MyQThread::run()
{
forever
{
listMutex.lock();
string = list.takeFirst();
listMutex.unlock();
writeMutex.lock();
if(!string.isEmpty())
...//do something
writeMutex.unlock();
}
}
嗨凡特,只是为了帮助澄清,你可以发布您的代码段为您QMutexs :) –
我添加了一个例子。 – Funt