Будет ли pthread_detach управлять моей памятью для меня? - PullRequest
3 голосов
/ 25 сентября 2008

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

while(TRUE) {
  pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t));
  pthread_create(thread, NULL, someFunction, someArgument);
  pthread_detach(*thread);
  sleep(10);
}

Будет ли отдельный поток освобождать память, выделенную malloc, или это то, что мне теперь нужно сделать?

Ответы [ 2 ]

10 голосов
/ 26 сентября 2008

Нет. pthread_create () не может знать, что переданный ему указатель thread был выделен динамически. pthreads не использует это значение внутри себя; он просто возвращает новый идентификатор потока вызывающей стороне. Вам не нужно динамически распределять это значение; вместо этого вы можете передать адрес локальной переменной:

pthread_t thread;
pthread_create(&thread, NULL, someFunction, someArgument);
1 голос
/ 26 сентября 2008

Вам нужно освободить память самостоятельно. Было бы предпочтительнее просто разместить переменную pthread_t в стеке, а не в куче.

...