1

我在 for 循环中创建了一些线程,在这个循环之后,将它们加入到另一个循环中。他们完成他们的工作,直到他们都完成它,是吗?我的最后一个结果在逻辑上是错误的。我的结果是正确的,就在创建后加入每个线程时!!

4

1 回答 1

2

是的,我认为你做得对。例如 Letsee

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绝对不能确定哪个线程将首先执行。您的操作系统将决定何时资源可用于您的线程并在占用最少的 CPU 上执行它们

于 2014-12-14T11:51:05.280 回答