1.當linux和Windows中,主線程以return 0結束時,程序會在主線程運行完畢后結束.
2.當linux中,主線程以pthread_exit(NULL)作為返回值,則主線程會等待子線程.
#include<stdio.h> #include<unistd.h> #include<pthread.h> void * task(void * param) { sleep(50); printf("hello\n"); pthread_exit(NULL); } int main() { //初始化線程 pthread_t tid; pthread_attr_t attr; //有啥用啊 pthread_attr_init(&attr); //創建線程 int rc = pthread_create(&tid, &attr, task, NULL); if(rc) { printf("線程創建失敗!\n"); return -1; } printf("創建主線程\n"); pthread_exit(NULL); //return 0; }
上面的代碼在linux下執行,運行結果為:
創建主線程
hello
運行現象: 沒有指定去等待子線程,主線程也會等待子線程執行完畢后,才會最后結束程序.
但當把 main函數中改為如下這種:發現打印結果也只是: 創建主線程
//pthread_exit(NULL); return 0;
類似的在windows下,主線程中return 0,則主線程結束后就會馬上結束程序.
#include <iostream> #include "windows.h" #include "stdlib.h" using namespace std; DWORD WINAPI ThreadFun(void * param) { Sleep(5000); cout << "子線程" << endl; return 0; } int main() { //創建子線程 HANDLE h; DWORD ThreadID; h= CreateThread(0, 0, ThreadFun, NULL, 0, &ThreadID); cout << "主線程執行完畢" << endl; return 0; }
執行結果:
主線程執行完畢