从构造函数启动线程是禁忌吗?

时间:2019-07-26 02:25:56

标签: c++ multithreading

这里有两种从对象启动线程的玩具实现方式-一种来自构造函数,另一种来自成员函数。我搜索了SO,但没有具体答案。当SO专家说不要从构造函数启动线程时,我还是听不懂,如果从构造函数启动,可能会出现什么问题。与I相比,II具有什么优势?

实现1:从成员函数启动

class foo {
    thread th;
public:

    foo() {     
    }

    void run() {
        th = thread([]() {
            cout << " New thread \n";
        });
    }

    ~foo() {
        cout << " Thread joining\n";
        th.join();
    }
};

int main()
{
    for (int i = 0; i < 5; i++) {
        foo f;
        f.run();
        Sleep(2000);
    }

    return 0;
}

实现2:在构造函数中启动

class foo {
    thread th;
public:
    foo() {
        th = thread([]() {
            cout << " New thread \n";
        });
    }
    ~foo() {
        cout << " Thread joining\n";
        th.join();
    }
};

int main()
{
    for (int i = 0; i < 5; i++) {
        foo();
        Sleep(2000);
    }

    return 0;
}

0 个答案:

没有答案