Создавать Pthreads в цикле

Я создаю несколько потоков в цикле for и после этого цикла присоединяю их к другому циклу. они выполняют свою функцию, пока все они не закончат ее, не так ли? мой последний результат логически неверен. мой результат верен, просто когда присоединяешься к каждому потоку после его создания!!

1 ответ

Да, я думаю, что вы делаете правильно. Давайте, например,

extern "C"
 {
    #include <pthread.h>
    #include <unistd.h>
 }
#include <iostream>

using namespace std;

const int NUMBER_OF_THREADS = 5;

void * thread_talk(void * thread_nr)

{
     //do some operation here
     pthread_exit(NULL);         //exit from current thread
}

int main()

{

  pthread_t thread[NUMBER_OF_THREADS];

  cout << "Starting all threads..." << endl;

  int temp_arg[NUMBER_OF_THREADS] ;

  /*creating all threads*/
  for(int current_t = 0; current_t < NUMBER_OF_THREADS; current_t++)
  {

   temp_arg[current_t]   = current_t;

   int result = pthread_create(&thread[current_t], NULL, thread_talk, static_cast<void*>(&temp_arg[current_t]))  ;

   if (result !=0)
   {
   cout << "Error creating thread " << current_t << ". Return code:" << result <<  endl;
   }

  }

 /*creating all threads*/

/*Joining all threads*/
for(int current_t = 0; current_t < NUMBER_OF_THREADS; current_t++)
{
 pthread_join(thread[current_t], NULL);
}

/*Joining all threads*/
cout << "All threads completed." ;

return 0;
}

Это ваше решение, когда вы хотите выйти из этой темы, позвонив pthread_exit function Абсолютно нет уверенности, что какой поток будет выполнен первым.Ваша ОС решит, когда ресурсы будут доступны для ваших потоков, и выполнит их на любом процессоре, наименее загруженном

Другие вопросы по тегам