创建一个线程并将结构传递给它

时间:2013-11-03 08:39:56

标签: c pthreads

我想创建n个线程。然后传递一个结构,每个结构用数据填充该结构;例如bool,用于跟踪线程是否已完成或是否已被终止信号中断。

n = 5; // For testing.

pthread_t threads[n];
for(i=0; i<n; i++)
   pthread_create(&threads[i], &thread_structs[i], &functionX);

假设thread_structs已被malloced。

functionX()通知功能内部没有参数。我应该为结构创建一个参数吗?或者我传递结构的地方好吗?

如何指向刚刚传递给函数的结构?

2 个答案:

答案 0 :(得分:5)

这不是你使用pthread_create的方式:

http://man7.org/linux/man-pages/man3/pthread_create.3.html

   int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                      void *(*start_routine) (void *), void *arg);

第三个参数是你的例程,第四个参数将被转发到你的例程。你的日常应该是这样的:

void* functionX(void* voidArg)
{
    thread_struct* arg = (thread_struct*)voidArg;
    ...

并且pthread调用应该是:

pthread_create(&threads[i], NULL, functionX, &thread_structs[i]);

(除非你有一个pthread_attr_t作为第二个参数提供)。

答案 1 :(得分:2)

声明functionX

void* function functionX(void* data) {
}

然后将data转换为&thread_structs[i]的指针类型,并随意使用它。