我有两个 QMutex 对象,我需要将它们都锁定,erase()
方法。但顺序并不重要。
所以,现在我正在等待一个 QMutex 处于解锁 ( QMutexLocker locker(&listMutex)
) 状态,而不是等待另一个 ( QMutexLocker locker(&writeMutex)
)。
但是等待第一个解锁的互斥锁会更有效。而不是等待另一个。比等待时间会更短。
如何实施这种行为?
我是否应该创建额外的递归 QMutex 或 QSemaphore 并将两个 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();
}
}