我有这段代码如下所示。
其中 nrthr 代表线程数并由用户输入。我一直想要我的主要节目"调用testFunc一次,所以如果用户输入nrthr为3,那么我想创建2个新线程。所以我的问题是......我怎么能在while循环之前调用testFunc?
int threadCount = 0;
...
// Call testFunc here
while(threadCount < nrthr - 1) {
fprintf(stderr, "Created thread: %d\n", threadCount);
if(pthread_create(&(tid[threadCount++]), NULL, testFunc, args) != 0)
fprintf(stderr, "Can't create thread\n");
}
void *testFunc(void *arg)
{
...
}
答案 0 :(得分:2)
您可以像这样致电testFunc
:
void *result = testFunc(args);
但是,如果testFunc
调用任何与pthread相关的函数,请注意。由于在这种情况下函数没有在单独的线程中运行,因此调用像pthread_exit
这样的函数将无法正常工作。
答案 1 :(得分:2)
如果testFunc
应该在一个单独的线程上运行,那么可能就是它不会做某事并返回。
如果这个假设是正确的,你就不能在你的循环之前简单地调用它,否则你的主线程不会达到创建其他线程以同时运行 的程度。
如果该假设为假,那么您可以像任何其他函数testFunc(args)
一样调用它,如果您不关心它,则忽略返回值。另一件需要注意的事项是pthread_exit
从主线程调用时的行为 - 请参阅Is it OK to call pthread_exit from main?。