线程代码中的类型转换

时间:2013-05-08 19:04:16

标签: c pthreads

https://computing.llnl.gov/tutorials/pthreads/samples/join.c

我正在查看上面链接中的pthreads代码。

我无法理解上面代码中为变量t和BusyWork中的状态以及主要方法所做的类型转换。

来自pthread_exit的手册页:

retval指向的值不应该位于调用线程的堆栈上,因为在线程终止后该堆栈的内容是未定义的。

所以我猜这个例子中的类型转换试图避免在刚刚终止的线程堆栈上引用内存。但是我发现类型转换非常不方便和眩晕。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

当您使用pthread_create创建线程时,您的参数仅限于sizeof(void *),您通常使用它来传递指向结构的指针或可能大于参数大小的任何其他数据。

在此示例中,参数long t的大小小于sizeof(void *),因此您可以直接将参数传递给pthread_create()调用。

进行显式转换以确保如果为type(long)或type(void *)分配的内存之间存在任何差异,它将由编译器修复。

在实践中,那些演员在大多数平台上都不会做任何事情,但你无法保证,所以你必须在使用之前将你的论证显式地转换为正确的类型。

恢复:示例使用类型void *作为类型long,而不是文字指针,因此变量status不会取消引用任何内容。