[C/C++] Multithreading Porgramming - pthread

  • Multithreading Porgramming
  • 之前才剛談過Process Programming現在就跳到Multithreading Programming會不會快了點,實際上現在很少人使用Process Programming,因為他除了要在複製一份記憶空間之外,彼此的Process也不容易通訊,縱使你透過vfork()可以一起共用記憶體,但是vfork()並不是做同步處理,他是先做child process才做parent process,這樣反而失去我們原先的Process Programming意圖。所以我們要開始轉戰到linux的pthread開發。

    [C/C++] Process Programming - fork()裡的範裡改寫成Multithreading的版本如下:

    Download:equThread.c

    首先你會看到我們多了一個結構體宣告,且solveEqu函式的型態也變了。

    他變成回傳void*以及接收void*,這樣的型態宣告是要應和pthread的呼叫,我們之後會看到,因為只能傳送一個變數(void* data),所以我把要處理的檔案宣告在一個結構體上EquData,傳送時只要傳整個結構體就OK。下面是main()的部份。

    19~20行我們分別宣告了要傳送的資料陣列以及pthread_t變數thread1,thread2,因為這裡我們只處理兩個 thead,所以只宣告兩個(你也可以用很多個thread)。

    24跟28行分別建立了一個thread,thread1是計算equation1,thread2是計算equation2,而pthread_create的詳細參數部份你可以參考下面的網頁:

    http://www.opengroup.org/onlinepubs/007908799/xsh/pthread_create.html

    30~31行是在等待thread處理完並且把他們給集結起來。

    上面的程式你可以透過下面得指令來編譯:

    gcc -o equThread equThread.c -lm -lpthread

    輸出結果就跟之前的Process Porgramming一樣,你也可以拿到不同核心上跑跑看,看看是否效能有提昇。

    基本的thread設計其實很簡單,但如果要考慮到許多thread的溝通與資源共用問題,那就比較複雜一點了。

No comments:

Post a Comment

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas