1

请看一下我们的pthread_create()原型:

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

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

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

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

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

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

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

我相信应该始终考虑参考,但你知道为什么长时间没有参考吗?

感谢你们!

4

1 回答 1

0

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

但是,请记住,指针本身就是一个值。void*如果您传递的数据量足够小以适合 a - 即如果您需要传递给函数的只是一个整数值,则通常将该值简单地用作线程函数的数据。这就是正在发生的情况:

long t;

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

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

这样做的一个优点是您无需处理线程数据的生命周期问题。

于 2012-09-09T17:43:53.910 回答