簡體   English   中英

C ++線程程序不會終止

[英]C++ thread program doesn't terminate

我不知道為什么我的代碼不會終止。 這可能是我在這里想念的一些明顯的事情,請幫忙!

using namespace std;
int main(int argc, char* argv[])
{
    MyClass *m = new MyClass();
    thread t1(th,m);

    delete m;
    m=NULL;
    t1.join();
    return 0;
}

void th(MyClass *&p)
{
    while(p!=NULL)
    {
        cout << "tick" << endl;
        this_thread::sleep_for(chrono::seconds(1));
    }
    return;
}

正在為該線程提供m的副本,而不是對其的引用。 使用參考包裝為其提供參考:

thread t1(th,std::ref(m));

程序可能會按預期結束; 但是由於在一個線程上修改m並在不同步的情況下在另一個線程上讀取它的數據競爭,您仍然具有不確定的行為。 要解決此問題,請使用std::atomic<MyClass*> ,或使用互斥鎖保護這兩種訪問。

暫無
暫無

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

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