混淆将数据传递给pthread_create()......它是如何工作的?

时间:2012-09-09 04:58:50

标签: pthreads

请查看我们拥有的pthread_create()原型:

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

到最后一个参数是一个void指针。但是看看互联网上的一些代码我看到开发人员在做什么:

long t;
pthread_create( &thread, NULL, function, (void*)t);

它有效!我的意思是他们没有这样做:

pthread_create( &thread, NULL, function, (void*)&t);

换句话说,没有使用“t”的引用。

但是,如果我将数据类型更改为“int”而不是“long”..则不起作用。

我认为应始终考虑引用,但您是否知道为什么长时间没有引用?

谢谢你们!

1 个答案:

答案 0 :(得分:0)

传递给线程函数的参数是void*。在一般情况下,该指针可以指向函数可以使用的某些数据块。

但是,请记住指针本身是一个值。如果您传递的数据量足够小以适合void*,那么简单地将该值用作线程函数的数据是很常见的 - 即,如果您需要传递给函数的所有内容都是整数值。这就是案件的情况:

long t;

t = /* some value to pass to the thread */;

pthread_create( &thread, NULL, function, (void*)t);

这样做的一个优点是你没有处理线程数据的生命周期问题。