使用std :: thread时奇怪的Qt Creator行为

时间:2013-08-06 12:19:31

标签: qt-creator stdthread

在使用C ++ 11的std::thread时,我发现了以下奇怪的应用程序行为(使用Qt Creator 2.7.2):

文件main.cpp:

#include <iostream>
#include <thread>

class A {
public:
    A() {
        j = 0;
    }

    void run() {
        std::thread t(&A::foo, this, 4, 5);
        t.join();
    }

private:
    int j;

    void foo(int x, int y) {
        j+=x; j+=y;
        std::cout << "foo: " << x << " " << y << " " << j << std::endl;
    }
};

int main(int argc, char *argv[])
{
    Q_UNUSED(argc);
    Q_UNUSED(argv);

    A a;
    a.run();
    a.run();
    a.run();

    return 0;
}

.pro文件:

QT       += core

QT       -= gui

TARGET = Threads
CONFIG   += console
CONFIG   -= app_bundle

QMAKE_CXXFLAGS += -std=c++11 -pthread

TEMPLATE = app

SOURCES += main.cpp

当使用'Run in terminal disabled'运行它时,产生的输出是:

  

foo:4 5 9
  foo:4 5 18
  foo:4 5 27

(预期)

或:

  

foo:4 5 9
  foo:4 5 18

(错误,一次run()调用缺失)

由于此应用程序实际上并不是多线程的(只有一个子线程始终运行),因此它看起来不像竞争条件。知道附加代码有什么问题吗?

0 个答案:

没有答案