gpt4 book ai didi

c - 线程代码中的类型转换

转载 作者:行者123 更新时间:2023-11-30 15:49:03 25 4
gpt4 key购买 nike

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

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

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

来自 pthread_exit 的手册页:

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

所以我猜示例中的类型转换试图避免引用刚刚终止的线程堆栈上的内存。但我发现打字非常不方便而且很奇怪。有人可以解释一下吗?

最佳答案

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

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

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

实际上,这些强制转换在大多数平台上不会执行任何操作,但您不能保证这一点,因此您必须在使用参数之前将参数显式强制转换为正确的类型。

继续:该示例使用类型 void * 作为类型 long,而不是作为文字指针,因此变量 status不要取消引用任何东西。

关于c - 线程代码中的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com