簡體   English   中英

QtConcurrentRun和互斥鎖的非常簡單的方法有時會給出分段錯誤

[英]Very simple method with QtConcurrentRun and mutex sometimes gives segmentation fault

我想知道這段代碼有什么問題。 有時我會出現固立錯誤,有時不會。 這是我在更大的軟件中遇到的一個問題,它的想法是同時只有一個線程正在執行方法MyClass :: print。 即使使用這個簡單的示例,它也會因分段錯誤而失敗。 代碼有什么問題? 我該如何解決這個問題?

謝謝!

#include <iostream>
#include <ctime>
#include <QMutex>
#include <QtConcurrentRun>

class MyClass : QThread {
public:
    void print(std::string str) {
        mutex.lock();
        std::cout << "In some thread: " <<  str << "\n";
        mutex.unlock();
    }

private:
    QMutex mutex;

};

int main() {

    MyClass myCl;

    for(int i=0; i < 10; i++) {
        QtConcurrent::run(&myCl, &MyClass::print,std::string("bla"));
    }

}

在產生它們的for循環之后,您不加入線程。

因此, main()函數可能在所有線程完成之前結束。 這將使myCl超出范圍,並且線程將嘗試訪問已被破壞的對象(尤其是其mutex變量)。 這給你未定義的行為

如果您在退出main()之前加入線程(或者找到任何其他不退出main() ,只要任何線程仍在運行),情況將會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM