標籤:多線程
Linux C 程式設計多線程基礎篇
題記:因為 Linux 網路入侵偵測系統的設計與實現希望使用多線程,因此希望系統的學習一下 Linux C程式設計多線程的知識
注意事項:因為 pthraed 庫不是 Linux 系統預設的庫,因此在進行多線程開發的時候,需要加上標頭檔#include <pthread.h>,編譯時間要加參數 -lpthread;了;gcc thread.c -o thread -lpthread。
進程和線程:
進程是程式執行,資源分派的基本單位,每個進程都擁有自己的資料區段,程式碼片段,堆棧段,在進行進程切換時有比較複雜的環境切換
線程是進程獨立的一條運行路線,是處理器調度的最小單位,也稱為輕量級進程,可以對進程的記憶體空間,資源進行訪問,並與該進程其它線程共用記憶體空間,代碼,資源。
線程相關的執行狀態和儲存變數放線上程式控制製表中,一個進程可以有多個線程,有多個線程式控制製表及堆棧寄存器,共用一個使用者地址空間
650) this.width=650;" src="http://pic002.cnblogs.com/images/2012/350751/2012040513175742.jpg" alt="2012040513175742.jpg" />
重要名詞:
線程標識:線程 ID,進程 ID 在整個系統中是唯一的,線程 ID,只在所屬進程的環境中有效;線程標識使用資料結構 pthread_t 表示;pthread_t 不能作為整數處理,Linux 使用無符號長整形數表示pthread_t.
重要函數:
pthread_self()
函數原型:pthread_t phtread_self(void)
參數:無
傳回值:(正在)調用線程的線程 ID
2. pthread_equal()
函數原型:int pthread_equal(pthread_t tidOne,pthread_t tidTwo)
參數:2 個 線程 ID
傳回值:相等則返回非 0 值,否則返回 0
#include <stdio.h>#include <stdlib.h>#include <pthread.h>int main(){ pthread_t thisId; thisId = pthread_self(); printf("當前線程 ID = %lu.\n",thisId); if(pthread_equal(thisId,pthread_self())){ printf("Yes,equal\n"); }else{ printf("No,not equal\n");} return 0;}
3. 建立線程
函數 pthread_create()
函數原型:int pthread_create(pthread_t *thread,pthread_attr_t *attr,void*(*start_routine)(void *),void *arg);
參數:thread:線程標識;attr 線程屬性設定,通常設為 NULL;start_routine:線程函數的起始地址,是一個指向 void 的指標作為參數和傳回值的函數指標;arg:傳遞給 start_runtine 的函數
傳回值:成功返回 0,失敗返回失敗碼
pthread_create(&tid,NULL,thrd_func,NULL)
本文出自 “SuperHakce” 部落格,請務必保留此出處http://superhakce.blog.51cto.com/6671637/1899141
Linux C 程式設計多線程基礎篇