создать / присоединить pthread в том же цикле - PullRequest
0 голосов
/ 30 мая 2018

У меня есть массив с именем doneArray, в котором я храню единицы, когда поток завершается.Например, в потоке 4 непосредственно перед вызовом pthread_exit я установил doneArray [4] равным 1. Поэтому я могу запустить doneArray, чтобы увидеть, завершился ли данный поток.

В этом цикле в моем main() код, я создаю поток, затем проверяю, завершены ли какие-либо потоки.Если они это сделают, я присоединяюсь к ним.Получающееся поведение порой сумасшедшее и не работает так же, как если бы у меня был отдельный цикл соединения.

   for(long i = 0; i < numberOfThreads; i++){

      pthread_create(&threads[i], NULL, body, (void*) i);

      sleep(random() % 5 + 1);

      //the loop that creates new threads should join threads that have finished
      for(int j = 0; j < numberOfThreads; j++){
         if(doneArray[j] == 1){
            pthread_join(threads[j], &retval);
         }
      }

   }

Мой инструктор сказал нам делать pthread_create и pthread_join в одном и том жепетля или мы потеряем очки.Я очень сбит с толку, потому что ранее меня учили НЕ делать этого, и другие ответы, которые я видел на этом сайте, также говорили о том, чтобы выполнить объединение в отдельном цикле:

If we put the pthread_join() in the same loop with pthread_create(), the calling thread i.e. main() will wait for the thread 0 to finish its work before creating the thread 1. This would force the threads to execute sequentially, not in parallel. Thus it would kill the purpose of multi-threading.

...