<310>函數
#include "myapue.h" #include <pthread.h> pthread_t ntid; void printids(const char *s) { pid_t pid; pthread_t tid; pid = getpid(); tid = pthread_self(); printf("%s pid %lu tid %lu (0x%lx)\n", s, (unsigned long)pid,\ (unsigned long)tid, (unsigned long)tid); } void *thr_fn(void *arg) { printids("new thread: "); return((void *)0); } int main(void) { int err; err = pthread_create(&ntid, NULL, thr_fn, NULL); if(err != 0) err_exit(err, "can't create thread"); printids("main thread:"); sleep(1); exit(0); }
(1)GCC使用庫函數spa
1)在Liunx中函數庫的命名規則都是以「lib」開頭,所以,庫文件只需填寫lib以後的內容便可。線程
2)pthread 庫不是 Linux 系統默認的庫,鏈接時須要使用靜態庫 libpthread.a,因此在使用pthread_create()建立線程時,須要連接該庫。code
3)連接時加上-lpthread進程
(2)<309>內存
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, get
void *(*start_routine) (void *), void *arg);it
thread:新建立線程的ID會被設置成thread指向的內存單元。class
attr:用於定製各類不一樣的線程屬性。設置爲NULL,建立一個具備默認屬性的線程。thread
start_routine:新建立的線程從start_routine函數的地址開始運行。
arg:若是須要向start_routine函數傳遞的參數有一個以上,須要把這些參數放到一個結構中,而後把這個結構的地址做爲arg參數傳入。
函數調用失敗時返回錯誤碼,而不是設置errno。
(3)<308>
pthread_t pthread_self(void);
線程調用得到自身的線程ID。
(4)
主線程須要休眠,若是主線程不休眠,它就可能會退出,這樣新線程尚未機會運行,整個進程可能就已經終止了。