【发布时间】:2013-05-09 03:19:46
【问题描述】:
https://computing.llnl.gov/tutorials/pthreads/samples/join.c
我正在查看上面链接中的 pthreads 代码。
我无法理解上面代码中对变量 t 和 BusyWork 和主要方法中的状态进行的类型转换。
来自 pthread_exit 的手册页:
retval 指向的值不应位于调用线程的堆栈中,因为该堆栈的内容在线程终止后未定义。
所以我猜这个例子中的类型转换是试图避免在刚刚终止的线程堆栈上引用内存。但我发现这种类型转换非常不方便和奇怪。谁能解释一下?
【问题讨论】:
-
我认为类型转换与
t变量的存储没有任何关系。这也是多余的,因为t已经是void *类型... -
我同意 H2C03。强制转换是多余的,但我认为您可能会混淆位于调用线程堆栈“上”的值与 passed-by-value 参数 in 堆栈. IE。必须避免返回
&t(或任何其他堆栈变量地址),因为结果void *在proc 的调用框架之外是未定义的。t的 值 本身就是一个值,仅此而已,在这种情况下,传入的是同一个值。至少我相信这可能是您断开连接的地方。