linux下主線程return 0和pthread_exit(NULL)的區別


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;
}
執行結果:

主線程執行完畢

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM