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);
2

Другие решения

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

3

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

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

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

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

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

2
По вопросам рекламы [email protected]