请查看我们拥有的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”..则不起作用。
我认为应始终考虑引用,但您是否知道为什么长时间没有引用?
谢谢你们!
答案 0 :(得分:0)
传递给线程函数的参数是void*
。在一般情况下,该指针可以指向函数可以使用的某些数据块。
但是,请记住指针本身是一个值。如果您传递的数据量足够小以适合void*
,那么简单地将该值用作线程函数的数据是很常见的 - 即,如果您需要传递给函数的所有内容都是整数值。这就是案件的情况:
long t;
t = /* some value to pass to the thread */;
pthread_create( &thread, NULL, function, (void*)t);
这样做的一个优点是你没有处理线程数据的生命周期问题。