2013-09-04 1 views
1

Может ли это вызвать ошибки, когда я использую pthread_create следующим образом?pthread_create с локальной переменной как параметр

void myFunction(){ 
    thread_t myThread; 
    pthread_create(&myThread,0,myRoutine,0); 
} 

Я не уверен, если использование локальной переменной myThread может привести к ошибкам, так как он перестает существовать, когда myFunction() выходов.

Может ли память в myThread использовать в ядре, когда функция выходит?

Мне не нужен идентификатор потока, хранящийся в myThread, поэтому я не хочу выделять память и освобождать ее снова.

ответ

2

Вы также можете передать PTHREAD_CREATE_DETACHED как часть атрибута потока при его создании. Таким образом, вам не придется беспокоиться о присоединении к теме позже. Что-то вроде этого:

pthread_t; 
int status; 
pthread_attr_t attr; 

status = pthread_attr_init(&attr); 
if (status != 0) { 
    fprintf(stderr, "pthread_attr_init() failed [status: %d]\n", status); 
    return 0; 
} 

status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); 
if (status != 0) { 
    fprintf(stderr, "pthread_attr_setdetachstate() failed [status: %d]\n", status); 
    return 0; 
} 

status = pthread_create(&t, &attr, myRoutine, 0); 
3

Вы не должны позволять нить «просто закончить», так как это может вызвать проблемы. Если вы ожидаете, что нить только закончится, она выиграет, вы должны ПОСЛЕДНИЕ использовать pthread_detach, и в этот момент нить полностью «автономна», и все должно быть в порядке, чтобы просто оставить ее.

2

Может ли это вызвать ошибки, когда я использую pthread_create следующим образом?

Да: у вас теперь нет возможности присоединиться к нити, когда она заканчивается. Это утечка ресурсов, аналогичная потере единственного указателя на выделенную память.

Если вы действительно не хотите закрывать его контролируемым образом, вы можете позвонить pthread_detach, чтобы он нести ответственность за сбор собственных ресурсов; то вы можете смело отказаться от ручки потока.

Может ли память в myThread использовать в ядре при выходе из функции?

Номер pthread_t - это всего лишь ручка, используемая для доступа к ресурсам потока. Он не управляет этими ресурсами, и он не нуждается в существовании, если вам не нужен доступ к ним.