必须在main函数中调用pthread_create()和pthread_join()吗?

时间:2016-09-27 16:15:44

标签: c multithreading pthreads

我是C语言中的多线程新手。我查看了一些在线示例,发现pthread_create()和pthread_join()总是在main函数中调用。 例如:

#include <stdio.h>
#include <pthread.h>

#define NTHREADS 10
void *thread_function(void *);
main()
{
   pthread_t thread_id[NTHREADS];
   int i, j;

   for(i=0; i < NTHREADS; i++)
   {
      pthread_create( &thread_id[i], NULL, thread_function, NULL );
   }

   for(j=0; j < NTHREADS; j++)
   {
      pthread_join( thread_id[j], NULL); 
   }

}

我的问题是,是否可以在main函数以外的其他函数中调用pthread_create()和pthread_join()?我还看到了有'&amp;'的例子在thread_function前面,是否有必要?如果是,为什么?

2 个答案:

答案 0 :(得分:4)

当然,您可以从其他功能调用这些功能。大多数在线示例显示来自main的这些函数的原因是他们试图让他们的示例更简短,更容易理解。

然而,更重要的是,pthread_createpthread_join调用可以来自其他线程,而不仅仅是来自主线程上运行的其他函数。除了主线程之外的线程启动其他线程并等待它们完成是完全合法的。只要线程句柄有效且可访问,您的线程就可以等待彼此的其他人。完成,并根据需要创建新线程。

答案 1 :(得分:3)

是的,您也可以在其他功能中调用它们。