天天看點

【線程】linux之thread錯誤解決方案

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(&lt));
      pthread_exit("New Thread Finished!");
}      

5.mystery注解

   1)預設狀态下建立的線程是非分離狀态的線程(線程的分離屬性指明一個線程以什麼樣的方式來終止自己

   2)非分離狀态的線程必須調用pthread_join()函數等待建立的線程結束,當函數pthread_join()傳回時,新建立的線程才終止并釋放自己占有的資源。

   3)分離狀态的線程不需要原線程等待,函數運作結束線程便終止,同時釋放占用的資源

本文出自 “成鵬緻遠” 部落格,請務必保留此出處http://infohacker.blog.51cto.com/6751239/1155041

QQ聯系方式:[email protected]

【線程】linux之thread錯誤解決方案

出處:lcw.cnblogs.com

郵箱:[email protected]

本文申明:本文版權歸作者和部落格園共有,歡迎轉載,轉載請注明出處.