2 つの QMutex オブジェクトがあり、両方をロックする必要がありますerase()
。しかし、順序は重要ではありません。
そのため、今は 1 つの 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();
}
}