[英]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.