pthread_create中的多个参数

时间:2013-03-06 22:49:49

标签: c linux pthreads

根据pthread_create手册页,函数的参数是:

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

关于void *arg,我只是想知道我是否可以向它传递多个参数,因为我编写的函数需要2个参数。

3 个答案:

答案 0 :(得分:3)

使用您的void*,您可以传递您选择的结构:

struct my_args {
  int arg1;
  double arg2;
};

这有效地允许你传递任意参数。你的线程启动例程除了解包那些调用真正的线程启动例程(它本身可能来自该结构)之外什么都不做。

答案 1 :(得分:1)

创建一个结构并重写你的函数只需要1个arg并在结构中传递两个args。

而不是

thread_start(int a, int b) {

使用

typedef struct ts_args {
   int a;
   int b;
} ts_args;

thread_start(ts_args *args) {

答案 2 :(得分:1)

使用结构和malloc。 e.g。

struct 
{
   int x;
   int y;
   char str[10];
} args;

args_for_thread = malloc(sizeof(args));

args_for_thread->x = 5;

... etc

然后使用args_for_thread作为args的{​​{1}}参数(使用从void *转换为args *)。由该线程来释放内存。