Я не уверен, что следующий код приведет к неопределенному поведению.
//global
pthread_t thread1;
void *worker(void *arg){
//do stuff
}
void spawnThread(){
//init stuff
int iret1 = pthread_create( &thread1, NULL, worker, (void*) p);
}
Мой spawnThread создаст новый поток, используя глобальный поток 1.
Если я в данный моментЗапустив поток, который еще не завершен, я буду вызывать неопределенное поведение при запуске нового потока с использованием переменной thread1?
Если это проблема, имеет ли смысл сделать мою переменную pthread_t локальной для функции?Я думаю, что это может быть проблемой, потому что он будет использовать стек, и как только я вернусь из своей функции, которая будет удалена.
Если я сделаю свой pthread_t локальным для функции, я не смогу использовать pthread_joinв другой части моей программы.Является ли каноническое решение иметь счетчик с мьютексом, отслеживающий, сколько текущих потоков запущено?
спасибо