Вопрос

Предположим, у меня есть следующий код:

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 в стеке, а не в куче.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top