1. 程式人生 > >Linux下多執行緒程式設計遇到的一些問題

Linux下多執行緒程式設計遇到的一些問題

今天在學習了Linux的多執行緒程式設計的基礎的知識點。於是就試著做了一個簡單的Demo。本以為會得到預期的結果。不成想卻遇到了意想不到的問題。

程式碼展示

我的C 程式碼很簡單,就是一個簡單的示例程式,如下:

#include <stdio.h>
#include <stdlib.h>
#include<pthread.h>

int sum  ;
void* runner(void *param);

int main( int argc, char*argv[])
{
    pthread_t tid;
    pthread_attr_t attr;

    if
(argc != 2){ fprintf(stderr,"usage : a.out<integer value>\n"); return -1; } if(atoi(argv[1])<0){ fprintf(stderr,"%d must be >= 0 \n",atoi(argv[1])); return -1; } pthread_attr_init(&attr); pthread_create(&tid,&attr,runner,argv[1
]); pthread_join(tid,NULL); printf("Sum = :%d\n",sum); } void* runner(void *param){ int i , upper = atoi(param); sum = 0 ; for(i = 1; i < upper ; i++){ sum += i ; } pthread_exit(0); }

初遇問題

碼完程式碼我就迫不及待的想要進行編譯了,然而系統卻提示給了我這樣的問題。

g++  -o bin/Debug/PThreadTest obj/Debug/main.o   
obj/Debug/main.o:在函式‘main’中:

/home/mark/Code/C/PThreadTest/main.c:25
:對‘pthread_create’未定義的引用 /home/mark/Code/C/PThreadTest/main.c:26:對‘pthread_join’未定義的引用 collect2: error: ld returned 1 exit status Process terminated with status 1 (0 minute(s), 0 second(s)) 0 error(s), 0 warning(s) (0 minute(s), 0 second(s))

嘗試著解決問題

看到了這樣的提示,感覺有可能是Complier的問題吧。一開始我也是不理解到底是為什麼會這樣。然後我就在網上搜索了一下這些個關鍵字。網上的答案不一而足,說什麼的都有。對於咱這種菜鳥級的入門新手而言,只能去嘗試人家的解決方案。所以結果可想而知了,要麼成功了,要麼失敗了。而一般後者出現的概率比較的多。

  • 第一種方式:改變編譯器的路徑,到setting–>complier–>link complier.然而這並沒有解決我的問題,編譯過之後,仍舊還是這擱錯誤

  • 第二種方式:網上說Pthread並不是Linux的預設的庫,連線時需要使用庫libpthread.a。也就是在編譯的時候 新增在*.c 檔案的後面。這個方法在我的專案中,竟然成功的運行了。gcc main.c -lpthread -o Main

總結

在遇到了這個問題的時候,從一開始的摸不著頭腦,到慢慢的摸索著成功的道路,最後解決問題。我想這就是最基本的解決問題的方式吧。不是說解決問題了,就夠了。而是在解決問題的過程中進行不斷的思考,總結。這樣在今後遇到類似的問題的時候,我們才能更加高效的區解決問題。

程式設計之路比較的坎坷,腳踏實地的思考,才能最快的解決問題。