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