我有一个pthread指针,我需要为指针分配足够的空间来保存足够数量的pthread。然后初始化它们和pthread_create()以将线程传递给某些函数。
问题在于,如果我只使用malloc为指针分配空间,那么只需使用指针[index]进行pthread_create,就不会正确创建线程。我该如何解决这个问题?我相信pthread_t是某种类型的结构,所以我相信我需要在进行pthread之前初始化它们。我怎么做?谢谢。
我刚测试了一定数量的pthread,他们正常工作:
pthread_t t1, t2, t3 ...... tn;
然后
pthread_create(&t1, NULL, function, (void *)argument)
但是如果我使用指针和malloc,它们就不会工作。不会创建线程。
pthread_t *ptr;
ptr = malloc(sizeof(pthread_t)*num);
然后
pthread_create(&ptr[index], NULL, function, (void *)argument)
不起作用。在这种情况下,如何初始化然后ptr [index]?
答案 0 :(得分:5)
some space
是什么?
您没有填写完整的代码,但只是一个建议,您是否初始化了num
?
检查以下代码。我相信它有效。
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void* func(void* id)
{
int *c;
c = (int*)id;
if(c)
printf("%d\n", *c);
}
int main(int argc, char *argv[])
{
int i = 0;
int *index = NULL;
int num;
pthread_t *ptr;
if (argv[1])
num = atoi(argv[1]);
index = calloc (num, sizeof (int));
for(i = 0; i < num; i++)
{
index[i] = i;
}
ptr = malloc(sizeof(pthread_t)*num);
for(i = 0; i < num; i++)
{
pthread_create(&ptr[i], NULL, func, (void*)&index[i]);
}
for(i = 0; i < num; i++)
pthread_join(ptr[i], NULL);
return 0;
}
答案 1 :(得分:1)
与动态分配整数数组相同...
pthread_t *id_array;
id_array = (pthread_t*)malloc(sizeof(pthread_t)*n);
其中n =数组大小......
它会对你有用..