【发布时间】:2011-12-15 20:36:52
【问题描述】:
我的问题是,就指针等而言,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(...) 是否可行?我知道samplearg 将在threadfunc 的范围内,我只是在检查以防C 不遵循典型的范围规则——因为samplearg 是在for() 循环内创建的,并且通常会退出for() 循环迭代后的范围,并且实际变量本身被传递而不是值。我会测试自己,但可能有一点你可以启发我,在远程 linux 机器上开发对我来说有点麻烦。
【问题讨论】:
-
pthread_create( ) 返回一个 int。来自手册页:返回值 如果成功,pthread_create() 函数将返回零;否则,将返回错误号以指示错误。
-
@PeteWilson - 他不是在谈论
pthread_create()的返回值 -
@Brian Roach——所以他不是!谢谢你的接送。
标签: c multithreading pointers pthreads function-pointers