#include int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg); Returns: 0 if OK, error number on failure
第一個參數為指向線程標識符的指針。
第二個參數用來設置線程屬性。
第三個參數是線程運行函數的起始地址。
第四個參數是運行函數的參數。
當創建線程成功時,函數返回0,若不為0則說明創建線程失敗,常見的錯誤返回代碼為EAGAIN和EINVAL。前者表示系統限制創建新的線程,例如線程數目過多了;後者表示第二個參數代表的線程屬性值非法. pthread_create的用法:由於pthread庫不是Linux系統默認的庫,所以在使用pthread_create創建線程時,需要在編譯中請加-lpthread參數,eg:gcc -o test -lpthrea test.c
例1:
#include "pthread.h" #include "stdio.h" void* thread_test(void* ptr) { while(1) printf("i am pthread\n"); } int main() { pthread_t pid; pthread_create(&pid, NULL, test_thread, NULL); while(1) printf("i am main pthread\n"); return 0; }
例2:
#include #include pthread_t id; int ret; void thread_1() { while(1) {printf(「I am thread\n」); sleep(1); } } main() {ret = pthread_create(&id,NULL,(void*)thread_1,NULL); if(ret != 0) printf("Create pthread error!\n"); while(1) { printf(「I am main thread\n」); sleep(2); } }
例3:
#include #include #include #include void *thread_function(void *arg); char message[] = "Hello World"; int main() { int res; pthread_t a_thread; void *thread_result; res = pthread_create(&a_thread, NULL, thread_function, (void *)message); if (res != 0) { perror("Thread creation failed"); exit(EXIT_FAILURE); } printf("Waiting for thread to finish...\n"); res = pthread_join(a_thread, &thread_result); //pthread_join 阻塞執行的線程直到某線程結束 if (res != 0) { perror("Thread join failed"); exit(EXIT_FAILURE); } printf("Thread joined, it returned %s\n", (char *)thread_result); printf("Message is now %s\n", message); exit(EXIT_SUCCESS); } void *thread_function(void *arg) { printf("thread_function is running. Argument was %s\n", (char *)arg); sleep(3); strcpy(message, "Bye!"); pthread_exit("Thank you for the CPU time"); } [[email protected] tmp]# cc -D_REENTRANT -I/usr/include/nptl thread2.c -o thread2 -L/usr/lib/nptl -lpthread [[email protected] tmp]# ./thread2 thread_function is running. Argument was Hello World Waiting for thread to finish... Thread joined, it returned Thank you for the CPU time Message is now Bye! pthread_join() void pthread_exit(void *retval) int pthread_join(pthread_t pid, void **thread_return)