повторное использование переменной pthread_t для текущих запущенных потоков

Я не уверен, приведет ли следующий код к неопределенному поведению.

//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 в другом часть моей программы. Является ли каноническим решением счетчик с мьютексом, отслеживающий, сколько текущих потоков выполняется?

спасибо

8
задан Puppy 24 June 2011 в 11:45
поделиться