函數原型:
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); 4個參數:
第一個參數:指向線程標示符pthread_t的指標;
第二個參數:設定線程的屬性
第三個參數:線程運行函數的起始地址
第四個參數:運行函數的參數
pthreadTest.c
通過pthread_self()擷取當前線程的ID
#include<stdio.h>#include<pthread.h>void *print_pthread_id(void *arg){ printf("current thread id is %u\n",(unsigned)pthread_self());}int main(int argc, char * argv[]){ pthread_t thread; pthread_create(&thread,NULL,print_pthread_id,NULL); sleep(1); printf("main thread id is %u\n",(unsigned)pthread_self()); return 0;}編譯時間必須加-lpthread,
運行結果:
current thread id is 2279393024main thread id is 2287691520
pthreadTest1.c
#include<stdio.h>#include<pthread.h>#include<stdlib.h>#include<unistd.h>#include<string.h>pthread_t t_id;void printf_tid_pid(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)pid,(unsigned)tid,(unsigned)tid);}void *thread_fuction(void *arg){ printf_tid_pid("new thread: "); return ((void*)0);}int main(int argc,int argv){ int err; err = pthread_create(&t_id,NULL,thread_fuction,NULL); if(err != 0 ) { printf("create thread fail: %s\n",strerror(err)); } printf_tid_pid("main thread"); sleep(1); return 0;}
gcc -o pthreadTest1 pthreadTest1.c -lpthread
./pthreadTest1
main thread pid 10437 tid 3091662592 (0xb8470700)
new thread: pid 10437 tid 3083364096 (0xb7c86700)