0

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

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

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

来自 pthread_exit 的手册页:

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

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

4

1 回答 1

1

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

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

显式转换是为了确保如果为类型 (long) 或类型 (void *) 分配的内存之间存在任何差异,编译器将对其进行修复。

在实践中,这些转换在大多数平台上都不会做任何事情,但您不能保证这一点,因此您必须在使用之前将参数显式转换为正确的类型。

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

于 2013-05-08T19:19:46.593 回答