pthread百度百科

2021-08-20 07:43:53 字數 4371 閱讀 7723

posix執行緒(posix threads),簡稱pthreads,是執行緒的

posix標準。該標準定義了建立和操縱執行緒的一整套api。在

類unix作業系統(unix、linux、mac os x等)中,都使用pthreads作為作業系統的執行緒。windows作業系統也有其移植版pthreads-win32

中文名posix執行緒

外文名posix threads

簡    稱

pthreads

標    準

ieee std 1003.1c-1995

類    別

計算機程式設計 1

作用2資料型別

3操縱函式

4同步函式

5工具函式

6資料運用

編輯執行緒庫實行了posix執行緒標準通常稱為pthreads。posix執行緒具有很好的可移植性,使用pthreads編寫的**可執行於solaris、freebsd、linux 等平台,windows平台亦有pthreads-win32可供使用

[1]。pthreads定義了一套c語言的型別、函式與

常量,它以pthread.h標頭檔案和乙個執行緒庫實現。

[2][3]編輯

pthread_t:執行緒id

pthread_attr_t:執行緒屬性

編輯pthread_create():建立乙個執行緒

pthread_exit():終止當前執行緒

pthread_cancel():中斷另外乙個執行緒的執行

pthread_join():阻塞當前的執行緒,直到另外乙個執行緒執行結束

pthread_attr_init():初始化執行緒的屬性

pthread_attr_setdetachstate():設定脫離狀態的屬性(決定這個執行緒在終止時是否可以被結合)

pthread_attr_getdetachstate():獲取脫離狀態的屬性

pthread_attr_destroy():刪除執行緒的屬性

pthread_kill():向

執行緒傳送乙個訊號

編輯用於 mutex 和條件變數

pthread_mutex_init() 初始化

互斥鎖pthread_mutex_destroy() 刪除互斥鎖

pthread_mutex_lock():占有互斥鎖(阻塞操作)

pthread_mutex_trylock():試圖占有互斥鎖(不阻塞操作)。即,當互斥鎖空閒時,將占有該鎖;否則,立即返回。

pthread_mutex_unlock(): 釋放互斥鎖

pthread_cond_init():初始化

條件變數

pthread_cond_destroy():銷毀條件變數

pthread_cond_signal(): 喚醒第乙個呼叫

pthread_cond_wait()而進入睡眠的執行緒

pthread_cond_wait(): 等待條件變數的特殊條件發生

thread-local storage(或者以pthreads術語,稱作

執行緒特有資料):

pthread_key_create(): 分配用於標識程序中線程特定資料的鍵

pthread_setspecific(): 為指定執行緒特定資料鍵設定執行緒特定繫結

pthread_getspecific(): 獲取呼叫執行緒的鍵繫結,並將該繫結儲存在 value 指向的位置中

pthread_key_delete(): 銷毀現有執行緒特定資料鍵

pthread_attr_getschedparam();獲取執行緒優先順序

pthread_attr_setschedparam();設定執行緒優先順序

編輯pthread_equal(): 對兩個執行緒的執行緒標識號進行比較

pthread_detach(): 分離執行緒

pthread_self(): 查詢執行緒自身執行緒標識號

編輯函式應用背景:在單執行緒程式中,函式經常使用全域性變數或靜態變數,這是不會影響程式的正確性的,但如果多執行緒呼叫的函式使用全域性變數或靜態變數,則很可能引起程式設計錯誤,因為這些函式使用的全域性變數和靜態變數無法為不同的執行緒儲存各自的值,而當同一程序內的不同執行緒幾乎同時呼叫這樣的函式時就可能會有問題發生。而解決這一問題的一種方式就是使用

執行緒特定資料的機制。

下面我們引入乙個簡單程式例項,並以此作為介紹執行緒特定資料的案例。

[2]執行緒特定資料:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include

#include

staticcharstr[100];

voida(char* s)

voidb()

可以想象,如果在多執行緒程式中,各個執行緒都依次呼叫函式 a 和函式 b,那麼某些執行緒可能得不到期望的顯示結果,因為它使用 b 顯示的字串可能並不是在 a 中設定的字串。讀者會發現,這兩個函式非常的簡單,但在本章內容中,這兩個函式已經足以解釋

執行緒特定資料的含義,因為這兩個函式代表了使用執行緒特定資料機制的一種典型場合,即有多個函式使用同乙個

全域性變數。

posix要求實現posix的系統為每個程序維護乙個稱之為 key 的結構

陣列,這個陣列中的每乙個結構稱之為乙個執行緒特定

資料元素。posix 規定系統實現的 key 結構陣列必須包含不少於 128 個執行緒特定資料元素,而每個執行緒特定資料元素中至少包含兩項內容:使用標誌和

析構函式

指標。執行緒特定資料元素中的使用標誌指示這個陣列元素是否正在使用,初始值為「不在使用」,我們稍後討論執行緒特定資料元素中的析構函式指標。在後面的介紹中,我們假設key 結構

陣列中包含 128 個元素。

[3]key 結 構 數 組 中 每 個 元 素 的 索 引 (0~127) 稱 之 為 鍵 (key) 當 一 個 線 程 調 用,pthread_key_create 建立乙個新的執行緒特定資料元素時,系統搜尋其所在程序的 key 結構陣列,找出其中第乙個不在使用的元素,並返回該元素的鍵。這個函式的形式為:

1

intpthread_key_create(pthread_key_t *key,void(*destructor)(void*));

[4]引數 key 為乙個 pthread_key_t變數的

指標,用於儲存得到的鍵值。引數 destructor為指定的

析構函式的指標。除了 key 結構

陣列,系統還在程序中維護關於每個執行緒的多種資訊。這些特定於

執行緒的資訊被儲存於稱之為 pthread 的結構中。pthread 結構中包含名為 pkey 的

指標陣列,其長度為128,初始值為空。這 128 個指標與 key 結構陣列的 128 個執行緒特定

資料元素一一對應。在呼叫 pthread_key_create 得到乙個鍵之後,每個執行緒可以依據這個鍵操作自己的 pkey 指標陣列中對應的指標,這通過 pthread_getspecific 和 pthread_setspecific 函式來實現。這兩個函式的形式為:

1

2

void*pthread_getspecific(pthread_key_t key);

intpthread_setspecific(pthread_key_t key,constvoid*value);

[5]pthread_getspecific 返回 pkey 中對應於 key 的

指標,而 pthread_setspecific 將 pkey 中對應於 key 的指標設定為 value。我們使用

指標陣列中對應於 key 的位置,那麼執行緒中呼叫的函式即可通過 pthread_getspecific 獲得這個指標,這就實現了執行緒內部資料在各個函式間的共享。當乙個執行緒終止時,系統將掃瞄該執行緒的 pkey

陣列,為每個非空的 pkey

指標呼叫相應的

AnimateWindow 百度百科

animatewindow 開放分類 程式設計 計算機 api 函式功能 該函式能在顯示與隱藏視窗時能產生特殊的效果。有兩種型別的動畫效果 滾動動畫和滑動動畫。函式原型 bool animatewindow hwnd hwnd,dword dwtime,dword dwflags 引數 hwnd 指...

WCF百度百科

根據微軟官方的解釋,wcf 之前的版本名為 indigo 是使用託管 建立和執行面向服務 service oriented 應用程式的統一框架。它使得開發者能夠建立乙個跨平台的安全 可信賴 事務性的解決方案,且能與已有系統相容協作。wcf是微軟分布式應用程式開發的集大成者,它整合了.net平台下所有...

Mashup 百度百科

mashup是糅合,是當今網路上新出現的一種網路現象,將兩種以上使用公共或者私有資料庫的web應用,加在一起,形成乙個整合應用。一般使用源應用的api介面,或者是一些rss輸出 含atom 作為內容源,合併的web應用用什麼技術,則沒有什麼限制。mashup在geek群體和網際網路玩家之中獲得了極大...