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를 해제 할 수는 있지만 내 실제 응용 프로그램)?
여기에 무엇을 하려는지 확실하지 않습니다. 'pthread_join'은 쓰레드가 완료 될 때까지 블럭합니다. 스레드가 종료하는 데 오랜 시간이 걸리면 종료가 누락 될 염려는 없습니다. – user4581301
@ user4581301 문제는'pthread_join'을 사용하면 자식 스레드가 끝날 때 상위 스레드에게'pthread_join'을 호출해야한다는 것입니다. 대신'pthread_detach'를 사용하면 자식 스레드가 끝날 때까지 기다릴 수 없습니다. – MegaStupidMonkeys