在Linux下qt 4.7.4使用gcc 4.4.3 下面的代碼編譯得很好,沒有運行時錯誤。QReadWriteLock遞歸模式不工作
class TestThread: public QThread {
private:
QReadWriteLock mutex;
public:
bool mStop;
TestThread(): mutex(QReadWriteLock::NonRecursive),mStop(false) {}
void run() {
while(!mStop) {
mutex.lockForRead();
qDebug() << "Tread running";
msleep(100);
}
}
};
鎖被同一個線程多次鎖定,沒有任何反應。根據手冊http://doc.qt.io/archives/qt-4.7/qreadwritelock.html
該鎖應該只能由同一個線程鎖定一次。這是一些嚴重的錯誤還是我誤解了手冊?
回覆Chris:在NonRecursive中也必須解鎖多次,如果一個解鎖被註釋掉,下面的代碼永遠不會打印「Writing」。
class TestThread: public QThread {
private:
QReadWriteLock mutex;
public:
TestThread(): mutex(QReadWriteLock::NonRecursive){}
void run() {
mutex.lockForRead();
mutex.lockForRead();
qDebug() << "Tread running";
//mutex.unlock();
mutex.unlock();
mutex.lockForWrite();
qDebug() << "Writing";
mutex.unlock();
msleep(50);
}
};
int main(int argc, char *argv[]) {
TestThread myThread;
myThread.start();
usleep(500000);
myThread.terminate();
}
是的你是對的,行爲有點混亂。我將不得不做更多的挖掘來弄清楚那裏發生了什麼。 – Chris