Будет ли pthread_detach управлять моей памятью за меня?
-
02-07-2019 - |
Вопрос
Предположим, у меня есть следующий код:
while(TRUE) {
pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t));
pthread_create(thread, NULL, someFunction, someArgument);
pthread_detach(*thread);
sleep(10);
}
Освободит ли отсоединенный поток память, выделенную malloc, или мне теперь придется это делать?
Решение
Нет. pthread_create() не имеет возможности узнать, что нить переданный ему указатель был динамически выделен.pthreads не использует это значение внутри себя;он просто возвращает новый идентификатор потока вызывающей стороне.Вам не нужно динамически выделять это значение;вместо этого вы можете передать адрес локальной переменной:
pthread_t thread;
pthread_create(&thread, NULL, someFunction, someArgument);
Другие советы
Память нужно освободить самостоятельно.Было бы предпочтительнее просто разместить переменную pthread_t в стеке, а не в куче.
Не связан с StackOverflow