我知道通過調用pthread_join
或pthread_detach
會釋放線程在完成後使用的資源,但我的情況並不那麼容易。pthread完成後泄漏內存
首先,我希望能夠從父線程終止子線程,所以我寫了這樣的內容:(動態分配的buf在那裏顯示我似乎無法找到一種方法來使用pthread_detach
因爲我不知道如何等待子線程完成(所以我可以免費製造)如果我分開它)
bool running = true;
void *foo(void *buf)
{
while (running)
{
// Do something with buf
}
return NULL;
}
int main(int argc, char **argv)
{
char *buf = new char[1024];
pthread_t tid;
pthread_create(&tid, NULL, foo, buf);
string cmd;
while (true)
{
cin >> cmd;
if (!cmd.compare("stop"))
{
running = false;
pthread_join(tid, NULL);
delete[] buf;
}
else
{
// Do something
}
}
return 0;
}
這似乎工作。但是,在父線程想要終止它之前,子線程有時會結束。在這種情況下,父線程被阻塞,所以
如何通知父線程的子線程終止因此父線程可以調用
pthread_join
?是否有使用
pthread_detach
,仍然能夠等待子線程來完成,所以我可以自由BUF之後(但它似乎我可以在這個演示子線程釋放BUF的方式,這對我是不可能的真正的應用)?
不完全確定你在這裏嘗試的是什麼。 'pthread_join'阻塞,直到線程完成,如果尚未完成。如果線程需要很長時間才能退出,這可能是'main'中的一個問題,但是您不必擔心漏掉了退出。 – user4581301
@ user4581301問題是如果我使用'pthread_join',那麼當子線程完成時它必須告訴父線程調用'pthread_join'。如果我使用'pthread_detach',我將無法等待子線程完成。 – MegaStupidMonkeys