如何动态分配(初始化)一个pthread数组?
问题描述:
我有一个pthread指针,我需要为指针分配足够的空间来保存足够数量的pthread。然后初始化它们和pthread_create()以将线程传递给一些函数。如何动态分配(初始化)一个pthread数组?
问题是,如果我只是使用malloc来为指针分配空间,那么只是使用pointer [index]的pthread_create,那么线程将不会被正确创建。我该如何解决这个问题?我相信pthread_t是一些结构类型,所以我相信我需要在执行pthread之前初始化它们。我怎么做?谢谢。
我只是他们工作正常了一定量的并行线程的测试:
pthread_t t1, t2, t3 ...... tn;
然后
pthread_create(&t1, NULL, function, (void *)argument)
但是,如果使用指针和malloc的,他们不会work.Thread不会被创建。
pthread_t *ptr;
ptr = malloc(sizeof(pthread_t)*num);
然后
pthread_create(&ptr[index], NULL, function, (void *)argument)
将无法正常工作。在这种情况下,我如何初始化ptr [index]?
答
是的,它应该工作。你的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;
}
答
为你动态分配整型数组它是一样的...
pthread_t *id_array;
id_array = (pthread_t*)malloc(sizeof(pthread_t)*n);
其中n =数组的大小...
它会为你工作..
+0
他需要**初始化**不分配内存 – Danh 2016-11-20 06:13:11
'pthread_t'是一些未指定的类型。在我的Debian/Linux系统上,它是一个'long' ...而'malloc'可能会失败。你测试过了吗?最后,你应该清除'ptr'数组......但是'pthread_create'可能会失败,你应该测试它。 – 2014-11-05 09:49:47
你的malloc解决方案似乎是正确的。问题可能在其他地方。 – interjay 2014-11-05 09:51:02
请修改您的问题以使用真实代码进行改进。 – 2014-11-05 09:52:36