在C中创建多个线程

时间:2016-01-28 12:43:37

标签: c multithreading pthreads

我只是使用C编程的初学者。对于我的大学项目,我想创建一个多线程服务器应用程序,多个客户端可以连接并传输可以保存在数据库中的数据。

经过许多教程后,我对如何使用pthread_create创建多个线程感到困惑。

它在某处完成了:

pthread_t thr;

pthread_create( &thr, NULL ,  connection_handler , (void*)&conn_desc);

在某处它就像

 pthread_t thr[10];

 pthread_create( thr[i++], NULL ,  connection_handler , (void*)&conn_desc);

我尝试在我的应用程序中实现这两个并且似乎工作正常。上述两种方法的哪种方法是正确的,我应该遵循。 对不起英语和描述不好。

3 个答案:

答案 0 :(得分:2)

两者都是等价的。没有"对"或"错误"接近这里。

通常,在创建多个线程时会看到后者,因此使用了一组线程标识符(pthread_t)。

在您的代码段中,两者都只创建一个线程。因此,如果您只想创建一个线程,则不需要数组。但这就像声明你没有使用的任何变量一样。它只是无害的。

事实上,如果您出于任何目的不需要线程ID(用于连接或更改属性等),则可以使用单个thread_t变量创建多个线程,而无需使用数组。

以下

pthread_t thr;
size_t i;

for(i=0;i<10;i++) {
   pthread_create( &thr, NULL , connection_handler , &conn_desc);
}

会工作得很好。请注意,转换为void*是不必要的(pthread_create()的最后一个参数)。任何数据指针都可以隐式转换为void *

答案 1 :(得分:0)

您提供的第一个创建了一个线程。

第二个(如果是循环的)有可能产生10个线程。

基本上pthread_t类型是线程的处理程序,所以如果你有10个数组,那么你可以有10个线程。

答案 2 :(得分:0)

多线程的示例示例:

#include<iostream>    
#include<cstdlib>    
#include<pthread.h>

using namespace std;

#define NUM_THREADS 5

struct thread_data
{
  int  thread_id;
  char *message;
};


void *PrintHello(void *threadarg)
{
   struct thread_data *my_data;   

   my_data = (struct thread_data *) threadarg;

   cout << "Thread ID : " << my_data->thread_id ;

   cout << " Message : " << my_data->message << endl;

   pthread_exit(NULL);
}

int main ()
{
   pthread_t threads[NUM_THREADS];

   struct thread_data td[NUM_THREADS];

   int rc, i;


   for( i=0; i < NUM_THREADS; i++ )    
   {

      cout <<"main() : creating thread, " << i << endl;

      td[i].thread_id = i;

      td[i].message = "This is message";

      rc = pthread_create(&threads[i], NULL,

                          PrintHello, (void *)&td[i]);

      if (rc){

         cout << "Error:unable to create thread," << rc << endl;

         exit(-1);    
      }    
   }    
   pthread_exit(NULL);    
}