Linux 多執行緒 pthread庫初探

2021-07-11 06:27:09 字數 2474 閱讀 3250

linux 多執行緒 pthread庫用法(一)

linux 執行緒有時候也叫light weight processlwp 輕量級執行緒,是程序的乙個執行流,有自己的執行棧,是作業系統排程的最小單位。 多執行緒優勢在於切換開銷小,同程序內通訊方便,涉及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...