1.錯誤現象:
undefined reference to 'pthread_create'
undefined reference to 'pthread_join'
2.問題原因:
pthread 庫不是 Linux 系統預設的庫,連接配接時需要使用靜态庫 libpthread.a,是以在使用 pthread_create()建立線程,以及調用 pthread_atfork()函數建立fork處理程式時,需要連結該庫。
3.問題解決:
在編譯中要加 -lpthread參數
gcc thread.c -o thread -lpthread
thread.c為你些的源檔案,不要忘了加上頭檔案#include<pthread.h>
4.源碼:
//thread_currentTime.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <pthread.h>
void *Print_CurrentTime(void);
int main ()
{
int ret;
void *thread_result;
pthread_t new_thread;
ret = pthread_create(&new_thread,NULL,Print_CurrentTime,NULL);
if (ret != 0)
{
perror("Thread Creation Failed!");
exit(EXIT_FAILURE);
}
printf("Waiting for New thread...\n");
ret = pthread_join(new_thread, &thread_result);
if (ret != 0)
{
perror("Thread Join Failed!");
exit(EXIT_FAILURE);
}
printf("Thread Joined,returned:%s\n", (char *)thread_result);
return 0;
}
void *Print_CurrentTime(void)
{
time_t lt;
lt =time(NULL);
printf ("Current Time: %s",ctime(<));
pthread_exit("New Thread Finished!");
}
5.mystery注解
1)預設狀态下建立的線程是非分離狀态的線程(線程的分離屬性指明一個線程以什麼樣的方式來終止自己
2)非分離狀态的線程必須調用pthread_join()函數等待建立的線程結束,當函數pthread_join()傳回時,新建立的線程才終止并釋放自己占有的資源。
3)分離狀态的線程不需要原線程等待,函數運作結束線程便終止,同時釋放占用的資源
本文出自 “成鵬緻遠” 部落格,請務必保留此出處http://infohacker.blog.51cto.com/6751239/1155041
QQ聯系方式:[email protected]
出處:lcw.cnblogs.com
本文申明:本文版權歸作者和部落格園共有,歡迎轉載,轉載請注明出處.