我有兩個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