我想知道使用不同数量的pthread_t
变量的不同之处
这是我做的一个简单的代码:
#include <stdio.h>
#include <pthread.h>
void *thread(void *vargp);
int main(int argc, char **argv)
{
pthread_t tid;
for (int i = 0; i < 5; i++){
int* a = malloc(sizeof(int));
*a = i;
pthread_create(&tid, NULL, thread, a);
}
if(pthread_join(tid, NULL) == -1){
printf("error");
exit(1);
}
}
void *thread(void *vargp)
{
int count = 1;
for(int i = 0; i <3; i++){
printf("count : %d, value : %d\n", count, (*(int *)vargp));
count++;
}
}
我的意思很好。但是,我认为奇怪的是它创建了5个线程,但只使用了一个pthread_t变量!我看到了一些例子,其中使用相同数量的pthread变量和它将创建的线程数。例如,如果我要创建如下所示的5个线程,我必须创建5个长度pthread_t
数组,如pthread_t tid[5]
。你能告诉我什么是差异吗?感谢
答案 0 :(得分:1)
pthread_t
的 pthread_create
变量是一个线程标识符,可以根据需要重复使用。因此,使用相同的idenitfier tid
创建多个线程的方式没有任何问题。但是你将失去所有其他线程的身份,除了使用它创建的最后一个线程,因为tid
在循环中不断被覆盖。
但是,如果您希望从线程接收退出值(使用pthread_join
)或者喜欢执行其他操作(例如使用pthread_detach
) - 您可以创建一个线程在分离状态或线程本身可以分离它),设置/获取调度参数(使用pthread_setschedparam
,pthread_getschedparam
)等,从主线程你不能这样做,因为你没有线程的ID。
简而言之,代码非常好,如果你想操作来自外部的线程tid[5]) >(与线程内部相反 - 线程可以使用pthread_self()
获取其ID。)
答案 1 :(得分:0)
让我们假设您要创建5个线程,然后在主线程上执行一些代码,然后在从主线程返回之前等待所有其他线程结束。 在这种情况下,您必须保留pthread_t以便将来在pthread_join中使用。