pthread_create() 函數詳解


pthread_create是類Unix操作系統(Unix、Linux、Mac OS X等)的創建線程的函數。它的功能是創建線程(實際上就是確定調用該線程函數的入口點),在線程創建以后,就開始運行相關的線程函數。

 

頭文件:

#include<pthread.h>

 

函數原型

 
int pthread_create (pthread_t * tidp,     const pthread_attr_t * attr,    void * (*start_rtn)(void*),      void *arg);
 
各個參數說明
第一個參數為指向 線程標識符的指針
第二個參數用來設置 線程屬性
第三個參數是 線程運行函數的起始地址
最后一個參數是 運行函數的參數
 
編譯鏈接參數:
-lpthread
 
 
返回值:
    若線程創建成功,則返回0。若線程創建失敗,則返回出錯編號,並且*thread中的內容是未定義的。
    返回成功時,由tidp指向的內存單元被設置為新創建線程的線程ID。attr參數用於指定各種不同的線程屬性。新創建的線程從start_rtn函數的地址開始運行,該函數只有一個萬能 指針參數arg,如果需要向start_rtn函數傳遞的參數不止一個,那么需要把這些參數放到一個結構中,然后把這個結構的地址作為arg的參數傳入。
    linux下用C語言開發多線程程序,Linux系統下的多線程遵循POSIX線程接口,稱為pthread。
 
注意事項:
    因為pthread並非Linux系統的默認庫,而是POSIX線程庫。在Linux中將其作為一個庫來使用,因此加上 -lpthread(或-pthread)以顯式鏈接該庫。函數在執行錯誤時的錯誤信息將作為返回值返回,並不修改系統全局變量errno,當然也無法使用perror()打印錯誤信息。
 
 
示例代碼:
輸出線程標識符:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>


void printids(const char *s)
{
pid_t pid;
pthread_t tid;
pid = getpid();
tid = pthread_self();
printf("%s pid %u tid %u (0x%x)\n", s, (unsigned int) pid, (unsigned int) tid, (unsigned int) tid);

}

void * thr_fn(void *arg)
{
printids("new thread: ");
return NULL;
}

int main()
{
int err;
pthread_t ntid;
err = pthread_create(&ntid, NULL, thr_fn, NULL);
if(err != 0)
{
printf("Can't create thread: %s\n", strerror(err));
}

printids("main thread");
pthread_join(ntid, NULL);

return EXIT_SUCCESS;
}

 
結果展示:

 

 

 
 
 

 


免責聲明!

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



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