1

我想创建 n 个线程。然后向他们传递一个结构,以用数据填充该结构;例如一个布尔值来跟踪线程是完成还是被终止信号中断。

n = 5; // For testing.

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

假设 thread_structs 已被分配。

Notice 函数内部functionX()没有参数。我应该为结构做一个参数吗?或者我在哪里传递结构没问题?

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

4

2 回答 2

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 作为第二个参数提供)。

于 2013-11-03T08:43:50.180 回答
2

宣布functionX

void* function functionX(void* data) {
}

然后data转换为指针类型的任何内容并随意&thread_structs[i]使用它。

于 2013-11-03T08:42:23.190 回答