我是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前面,是否有必要?如果是,为什么?
答案 0 :(得分:4)
当然,您可以从其他功能调用这些功能。大多数在线示例显示来自main
的这些函数的原因是他们试图让他们的示例更简短,更容易理解。
然而,更重要的是,pthread_create
和pthread_join
调用可以来自其他线程,而不仅仅是来自主线程上运行的其他函数。除了主线程之外的线程启动其他线程并等待它们完成是完全合法的。只要线程句柄有效且可访问,您的线程就可以等待彼此的其他人。完成,并根据需要创建新线程。
答案 1 :(得分:3)
是的,您也可以在其他功能中调用它们。