linux 多執行緒 pthread庫用法(一)
linux 執行緒有時候也叫light weight process
lwp 輕量級執行緒,是程序的乙個執行流,有自己的執行棧,是作業系統排程的最小單位。 多執行緒優勢在於切換開銷小,同程序內通訊方便,涉及io等阻塞性操作
時可以單獨開乙個執行緒不阻塞主流程,不足之處健壯性不如多程序,乙個執行緒crash,那麼所在程序就都crash了。這兩篇入門的文章寫的不錯:
本文主要總結下linux多執行緒庫 pthread 的最基本用法,進一步使用後面文字再介紹。
建立執行緒的 linux 庫函式,在 /usr/include 目錄下, 宣告如下:
/* create a new thread, starting with execution of start-routine
getting passed arg. creation attributed come from attr. the new
handle is stored in *newthread. */
extern
int pthread_create (pthread_t *__restrict __newthread,
const pthread_attr_t *__restrict __attr,
void *(*__start_routine) (void *),
void *__restrict __arg) __thrownl __nonnull ((1, 3));
// (gdb) pt pthread_t
// type = unsigned long ,也可以在庫函式中看到其定義,ptype 層層展開宣告,最終都能到基本資料型別
// mac os 中 pthread 是乙個結構體
// 定義在 pthreadtypes.h 中
/* thread identifiers. the structure of the attribute type is not
exposed on purpose. */
typedef
unsigned
long
int pthread_t;
union pthread_attr_t
;// pthread_attr_t 在對該結構進行處理之前必須進行初始化,在使用後需要對其去除初始化
#ifdef __x86_64__
# if __wordsize == 64
# define __sizeof_pthread_attr_t 56
函式宣告中用到了 restrict 關鍵字,詳細理解此關鍵字看這裡c語言關鍵字restrict。由 restrict 修飾的指標是最初唯一對指標所指向的物件進行訪問的方法,僅當第二個指標基於第乙個時,才能對物件進行訪問。由 restrict 修飾的指標主要用於函式形參,或指向由 malloc() 分配的記憶體空間。restrict 資料型別不改變程式的語義。 編譯器能通過作出 restrict 修飾的指標是訪問物件的唯一方法的假設,更好地優化某些型別的例程。linux man pages。
跑起來乙個linux多執行緒程式,可以用ps ufx|grep *** (*** 程式的名字)
檢視程序的狀態,l
就是多執行緒狀態的意思,還可以看程序啟動時間,執行的cpu時間。man ps
有詳細解釋:
bsd formats
, linux 下執行都會有:
/* 舉例三個執行緒: 主線程 + create 兩個 */
/* 可以直接在 xcode 中執行,如果在linux 上跑編譯的時候用下面的makefile, 主要是需要 -lpthread */
#include
#include
#include
void* thread1_main(void *p)
return null;
}void* thread2_main(void *p)
return null;
}int main()
pthread_join(tid1, &ret1);
pthread_join(tid2, &ret2);
return
0;}
乙個簡單的makefile
# 編譯當前目錄所有的 .c 檔案,注意鏈結 -lpthread
# 開啟所有 warning,按照錯誤處理
targets = mytest.bin
cflags = -wall -werror -m64 -g3 -std=c99
$(targets) : $(wildcard *.c)
$(cc) $(cflags) $^ -o $@ -lpthread
.phony : clean
clean:
rm *.bin
Linux 多執行緒 pthread
1.linux執行緒的發展 早在linux2.2核心中。並不存在真正意義上的執行緒,當時linux中常用的執行緒pthread實際上是通過程序來模擬的,也就是同過fork來建立 輕 程序,並且這種輕程序的執行緒也有個數的限制 最多只能有4096和此類執行緒同時執行。2.4核心消除了個數上的限制,並且...
linux多執行緒pthread使用
linux多執行緒pthread使用 標頭檔案pthread.h pthread t pthid pthread create pthid,null,func,null 建立執行緒。pthread join pthid,null 等待該執行緒執行完畢後再退出,阻塞 執行緒掛起,不再占用cpu pth...
pthread 多執行緒
多執行緒程式指的是在同乙個程式中多個執行流併發執行,它們共享程序的同乙個位址空間,分別完成相應的任務,並通過共享位址空間等方式完成執行緒間通訊,cpu按照時間片輪轉等方式對執行緒進行切換和排程。通常而言,執行緒共享的程序資源包括 linux中線程的建立依賴於lpthread.so 庫,建立乙個thr...