gpt4 book ai didi

c - pthread_create 函数格式和指针 - C Linux POSIX 库

转载 作者:太空宇宙 更新时间:2023-11-04 03:04:04 25 4
gpt4 key购买 nike

我的问题是,就指针等而言,pthread_create 函数及其调用的函数的格式到底是什么?我可以全神贯注于变量指针,尽管我需要澄清我在该领域的知识,但函数指针会让人讨厌。

我知道首选格式是

void *threadfunc(void *arg);

int main()
{
pthread_t threadinfo;
int samplearg;
pthread_create(&threadinfo, NULL, threadfunc, &samplearg);
}

但是,这会生成一个编译器警告 threadfunc 没有返回值,所以显然 * 是关于 threadfunc 返回的内容,而不是函数的特征?

我还看到函数定义为和 pthread_create 格式如下:

void threadfunc(void *arg);

pthread_create(&threadinfo, NULL, (void *)threadfunc, &samplearg);

这两者中哪一个是正确的,或者它们在功能上是等价的?有人可以向我解释函数指针的机制吗?

最后一个问题,在生成多个线程的 for 循环中,为线程唯一值初始化 int samplearg,然后将其传递给 pthread_create(...)?我知道 samplerg 会在 threadfunc 的范围内,我只是在检查以防 C 不遵循典型的范围规则——因为 samplearg 是在 for() 循环内创建的,通常会在 for() 循环迭代后超出范围,实际变量本身不会被传递值。我会测试自己,但可能有一点你可以启发我,在远程 linux 机器上开发对我来说有点麻烦。

最佳答案

你还没有给出你的 void *threadfunc(void *arg); 版本,但我猜它里面没有 return 语句。这就是编译器警告您的原因。因为声明说它必须返回一个 void*,所以你应该返回一个 void*void* 是指向任何指针类型的指针。只有 void(没有星号)不需要返回语句,因为它什么都不返回。

顺便说一句,当另一个线程加入您当前正在启动的线程时,返回值将传递给 pthread_join 语句。

关于c - pthread_create 函数格式和指针 - C Linux POSIX 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7905295/

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