linux執行緒資料及訊號量詳解

2021-06-04 14:20:57 字數 994 閱讀 3800

4.1 執行緒資料

/* 函式 createmykey,建立乙個鍵,並指定了destructor */

void createmykey ( void )

/* 函式 freewinkey,釋放空間*/

void freewinkey ( fl_window * win)

4.4 訊號量

訊號量本質上是乙個非負的整數計數器,它被用來控制對公共資源的訪問。當公共資源增加時,呼叫函式sem_post()增加訊號量。只有當訊號量值大於0時,才能使用公共資源,使用後,函式sem_wait()減少訊號量。函式sem_trywait()和函式pthread_ mutex_trylock()起同樣的作用,它是函式sem_wait()的非阻塞版本。下面我們逐個介紹和訊號量有關的一些函式,它們都在標頭檔案/usr/include/semaphore.h中定義。

訊號量的資料型別為結構sem_t,它本質上是乙個長整型的數。函式sem_init()用來初始化乙個訊號量。它的原型為:

extern int sem_init __p ((sem_t *__sem, int __pshared, unsigned int __value));

sem為指向訊號量結構的乙個指標;pshared不為0時此訊號量在程序間共享,否則只能為當前程序的所有執行緒共享;value給出了訊號量的初始值。

函式sem_post( sem_t *sem )用來增加訊號量的值。當有執行緒阻塞在這個訊號量上時,呼叫這個函式會使其中的乙個執行緒不在阻塞,選擇機制同樣是由執行緒的排程策略決定的。

函式sem_wait( sem_t *sem )被用來阻塞當前執行緒直到訊號量sem的值大於0,解除阻塞後將sem的值減一,表明公共資源經使用後減少。函式sem_trywait ( sem_t *sem )是函式sem_wait()的非阻塞版本,它直接將訊號量sem的值減一。

函式sem_destroy(sem_t *sem)用來釋放訊號量sem。

Linux訊號量詳解

1.什麼是訊號量 訊號量是一種特殊的變數,訪問具有原子性。只允許對它進行兩個操作 1 等待訊號量 當訊號量值為0時,程式等待 當訊號量值大於0時,訊號量減1,程式繼續執行。2 傳送訊號量 將訊號量值加1。我們使用訊號量,來解決程序或執行緒間共享資源引發的同步問題。2.linux中訊號量的使用 lin...

Linux訊號量詳解

1.什麼是訊號量 訊號量是一種特殊的變數,訪問具有原子性。只允許對它進行兩個操作 1 等待訊號量 當訊號量值為0時,程式等待 當訊號量值大於0時,訊號量減1,程式繼續執行。2 傳送訊號量 將訊號量值加1。我們使用訊號量,來解決程序或執行緒間共享資源引發的同步問題。2.linux中訊號量的使用 lin...

執行緒 訊號量

訊號量 訊號量本質上是乙個非負的整數計數器,它被用來控制對公共資源的訪問。當公共資源增加時,呼叫函式sem post 增加訊號量。只有當訊號量值大於 時,才能使用公共資源,使用後,函式sem wait 減少訊號量。函式sem trywait 和函式pthread mutex trylock 起同樣的...