Может ли это вызвать ошибки, когда я использую pthread_create следующим образом?
void myFunction(){
thread_t myThread;
pthread_create(&myThread,0,myRoutine,0);
}
Я не уверен, если использование локальной переменной myThread
может вызвать ошибки, потому что он перестает существовать, когда myFunction()
выходы.
Может ли память о myThread
все еще будет использоваться в ядре при выходе из функции?
Мне не понадобится идентификатор потока, хранящийся в myThread
поэтому я не хочу выделять память и освобождать ее снова.
Вы также можете передать 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);
Вы не должны позволять потоку «просто закончить», так как это определенно может вызвать проблемы. Если вы ожидаете, что нить только что закончилась, вы должны по крайней мере использовать pthread_detach
, в этот момент поток полностью «автономный», и должно быть в порядке, чтобы просто оставить его.
Может ли это вызвать ошибки при использовании
pthread_create
следующим образом?
Да: теперь у вас нет возможности присоединиться к ветке после ее завершения. Это утечка ресурсов, аналогичная потере единственного указателя на выделенную память.
Если вы действительно не хотите отключать его контролируемым образом, вы можете позвонить pthread_detach
возложить на него ответственность за приведение в порядок собственных ресурсов; тогда вы можете спокойно отказаться от ручки нити.
Может ли память о
myThread
все еще будет использоваться в ядре при выходе из функции?
Нет. pthread_t
это просто дескриптор, используемый для доступа к ресурсам потока. Он не управляет этими ресурсами и не должен существовать, если вам не нужен доступ к ним.