如何通过pthread_create()创建一个结构并传递给一个新线程

时间:2015-09-14 18:22:05

标签: c multithreading pthreads

我正在编写一个回调函数,我需要:

1创建一个结构体 2创建一个新线程并将此结构传递给线程,以便它独占使用
3返回一个指向此结构的指针...从回调函数...到主程序。

这将允许通过原始程序和新线程之间的共享内存进行通信。

我假设我必须使用malloc,因为在回调函数中创建的结构的范围仅在函数中。

我无法使其成为静态因为我将创建多个线程,每个线程都有自己的个人结构。

我需要了解这个过程,因为我是新手。

它会这样工作吗?

1 malloc一块内存" sizeof"结构。
2将指向此块的指针传递给新线程并将其返回到主程序 3在新线程中使用此内存创建一个新结构?

我现在已经搜索了一个星期,看不出应该怎么做。

BTW:我无法通过设计修改单线程的主程序。 我只能使这个回调函数产生许多新线程中的一个,并通过这个共享内存进行通信,我想成为一个结构。

感谢。

struct myStruct
{
    int elem1;
    int elem2;
    int elem3;
};



int* callBack(some parameters)
{
    *p = malloc(sizeof(myStruct));

    result = pthead_create( ??, ??, void *(*newThread), *p);

    return p;
}


void newThread()
{
    // pull off *p from stack?

    // somehow use the declared struct to access the malloc mem

    p->elem1 = p->elem2 + p->elem3;
}

1 个答案:

答案 0 :(得分:1)

通过pthread_create()创建的线程接受void*作为参数,因此线程例程的原型应该如下:

void newThread(void* data)

然后,此void*对应于作为pthread_create的最终参数传递的指针。然后,您可以将此指针强制转换为适当的数据类型(但请确保您获得正确的数据类型!)。一个例子如下:

void newThread(void* data)
{
    struct myStruct* p = data;
    p->elem1 = p->elem2 + p->elem3;
}