C,如何使用pthread_create函数创建线程

时间:2011-08-09 02:48:33

标签: c multithreading function pthreads createthread

我正在为一个调度队列创建一个c文件,该队列获取一个任务并将其放入一个链接列表的队列中。为此,我需要使用

创建线程
pthread_t cThread;
if(pthread_create(&cThread, NULL, work, param)){
    perror("ERROR creating thread.");
}

但是我需要创建另一个作为'work'和'param'变量的函数作为create function的参数。我的朋友告诉我,我只需要在无限循环的工作函数中放入任何代码,这样线程就不会死。任何人都可以解释每个参数进入pthread_create函数 - 特别是workparam?我搜索谷歌这个,但大多数教程都很难理解这个概念......

2 个答案:

答案 0 :(得分:30)

pthread_create的四个参数依次为:

  1. 指向pthread_t结构的指针,pthread_create将填写有关其创建的主题的信息。

  2. 指向带有线程参数的pthread_attr_t的指针。您可以安全地在大多数时间内通过NULL

  3. 在线程中运行的函数。该函数必须返回void *并获取void *参数,您可以根据需要使用该参数。 (例如,如果您使用相同的函数启动多个线程,则可以使用此参数来区分它们。)

  4. 您要启动该主题的void *。如果您不需要,请通过NULL

答案 1 :(得分:20)

澄清duskwuff的回答:

work参数是一个函数指针。该函数应该使用一个参数,该参数表示为void *类型并返回值void *

param应该是指向work将会收到的数据的指针。

举个例子,假设您想要将两个int传递给worker。然后,您可以创建以下内容:

int *param = (int *)malloc(2 * sizeof(int));
param[0] = 123;
param[1] = 456;
pthread_create(&cThread, NULL, work, param);

然后你的工作函数可以转换指针类型并获取参数数据:

void *work(void * parm) {
    int *param = (int *)parm;
    int first_val = param[0];
    ....
}

您可以执行更复杂的操作,例如创建包含您需要传递的所有数据的结构。