c-如何动态分配(初始化)pthread数组



我有一个pthread指针,我需要为指针分配足够的空间来容纳足够数量的pthread。然后初始化它们,pthread_create()将线程传递给一些函数。

问题是,如果我只使用malloc为指针分配空间,然后只使用pointer[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]?

是的,它应该可以工作。你的some space是什么?

你没有放完整的代码,只是一个建议,你初始化num了吗?

检查以下代码。我相信它是有效的。

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void* func(void* id)
{
        int *c;
        c = (int*)id;
        if(c)
                printf("%dn", *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=数组大小。。。

它对你有用。。

最新更新