pthread – 如何开始运行一个新的线程,而无需调用连接?

我想从主线程开始一个新的线程。 我不能使用连接,因为我不想等待线程退出并继续执行。
基本上我需要的是类似pthread_start(…),虽然找不到它。

编辑:
由于所有的答案build议create_thread应该开始线程的问题是,在简单的代码下面,它不工作。 下面程序的输出是“主线程”。 这似乎是从未执行的子线程。 任何想法,我错了?
编译并运行在Fedora 14 GCC 4.5.1版上

void *thread_proc(void* x) { printf ("sub thread.\n"); pthread_exit(NULL); } int main() { pthread_t t1; int res = pthread_create(&t1, NULL, thread_proc, NULL); if (res) { printf ("error %d\n", res); } printf("main thread\n"); return 0; } 

Solutions Collecting From Web of "pthread – 如何开始运行一个新的线程,而无需调用连接?"

启动线程的函数是pthread_create ,而不是pthread_join 。 当你准备等待时,你只使用pthread_join ,并重新同步,如果你分离线程,根本就没有必要使用它。 您也可以从不同的线程加入。

在退出之前(通过调用exit或者从main返回),你必须确保没有其他的线程正在运行。 一种方式(但不是唯一的)做到这一点是加入你创建的所有线程。

您的代码的行为取决于调度程序; 可能主程序在创建线程的printf之前退出。 我希望main()结束时的简单sleep(some_seconds)会导致线程输出出现:)

只需创建分离属性设置为on的线程。 为了达到这个目的,你可以在创建线程之后调用pthread_detach ,或者在创建之前调用pthread_detach

当线程被分离时,父线程不必等待它,不能获取它的返回值。

join调用等待线程终止并退出。

如果您希望主线程在子线程执行时继续执行,请不要调用join :子线程将与主线程同时执行…

你需要在man()的结尾调用pthread_exit,这会导致main等待其他线程启动并退出。 或者你可以显式调用pthread_join来等待新创建的线程

否则,当主返回时,进程被终止并且它创建的所有线程都将被终止。

线程在创建时自动启动。

你不只是需要调用pthread_create

 static void *thread_body(void *argument) { /* ... */ } int main(void) { pthread_t thread; pthread_create(&thread, NULL, thread_body, NULL); /* ... */ 

Pthread_create导致创建线程并开始执行。 但是当你想等待另一个线程完成临界区的开始使用时,则必须通过调用pthread_join方法来串行化线程。 这个API将使你的线程等待其他线程来完成执行。

码:

 #include<stdio.h> #include<pthread.h> #include<stdlib.h> #include<unistd.h> #define MAX_THREADS 100 void* workerFunction(void* inParam) { /* Function to write into same file*/ FILE* filePtr; long index=(long)inParam; char inText[100]; sprintf(inText,"\n Writing Thread Index %d", index); //Open a file in write mode +w filePtr = fopen("/var/tmp/ThreadSync.txt", "a"); if( filePtr == NULL) { printf("\n Error: Failed to open a file"); exit(1); } //write into file fprintf(filePtr, "%s",inText); fclose(filePtr); pthread_exit(NULL); } int main() { pthread_t threads[MAX_THREADS]; pthread_attr_t attr; long index = 0; int returnVal; /* Create the thread detach state attribute and pass to thread creation*/ void* status; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); /* Creation of the threads*/ for(index = 0; index<MAX_THREADS; index++) { returnVal = pthread_create(&threads[index], &attr,workerFunction,(void*)index); if(returnVal) { printf("\n Failed to create the Thread"); exit(0); } } /* Free the thread attribute */ pthread_attr_destroy(&attr); for(index = 0; index<MAX_THREADS; index++) { returnVal = pthread_join(threads[index], &status); if(returnVal) { printf("\nError: Failed to join the threads"); exit(1); } printf("\nMain: Join of the thread successful with thread index: %d & Status:%ld\n",index,(long)status); } printf("\n+++++++++++ END OF MAIN ++++++++++++\n"); pthread_exit(NULL); }