[英]C , how to create thread using pthread_create function
我正在为一个调度队列制作一个ac文件,该队列获取一个任务并将其放入一个链接列表的队列中。 为了做到这一点,我需要使用创建线程
pthread_t cThread;
if(pthread_create(&cThread, NULL, work, param)){
perror("ERROR creating thread.");
}
但是我需要创建另一个作为'work'和'param'变量的函数作为create function的参数。 我的朋友告诉我,我只需要在无限循环的工作函数中放入任何代码,这样线程就不会死。任何人都可以解释每个参数进入pthread_create
函数 - 特别是对于work
和param
? 我搜索谷歌这个,但大多数教程都很难理解这个概念......
pthread_create
的四个参数依次为:
指向pthread_t
结构的指针, pthread_create
将使用其创建的线程填充信息。
指向带有线程参数的pthread_attr_t
的指针。 您可以安全地在大多数时间传递NULL
。
一个在线程中运行的函数。 该函数必须返回void *
并获取一个void *
参数,您可以使用它,但是您认为合适。 (例如,如果您使用相同的函数启动多个线程,则可以使用此参数来区分它们。)
要启动线程的void *
。 如果您不需要,则传递NULL
。
澄清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];
....
}
您可以执行更复杂的操作,例如创建包含您需要传递的所有数据的结构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.