根据pthread_create手册页,函数的参数是:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
关于void *arg
,我只是想知道我是否可以向它传递多个参数,因为我编写的函数需要2个参数。
答案 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 *)。由该线程来释放内存。