linux核心同步機制之訊號量

2021-09-13 15:04:15 字數 1058 閱讀 2083

定義:

如果有乙個任務試圖獲得已經被占用的訊號量時,訊號量會將其推進乙個等待佇列,使其睡眠,當持有訊號量的程序將訊號量釋放以後,再喚醒該任務,並獲得該訊號量。

標頭檔案head.h**:

#ifndef __head_h__

#define __head_h__

#include #include #include #include #endif

sem.c**:

#include "head.h"

sem_t sem_w;

sem_t sem_r;

int a = 0;

void *eat0(int *arg)

}void *eat1(int *arg)

}void main(int argc ,char *ar**)

if( 0 != pthread_create(&pid1,null,eat1,null)) //建立執行緒2

if( 0 != pthread_join(pid0,null)) //以阻塞方式等待執行緒1結束

if( 0 != pthread_join(pid1,null)) //以阻塞方式等待執行緒2結束

}

編譯程式:

gcc -o sem sem.c -pthread

./sem

結果:

總結:主函式建立兩個執行緒,訊號量初始化資源設定為1,執行緒呼叫sem_wait取獲取這個訊號燈,第乙個執行緒一看,有1個,他就拿到了,然後可以繼續後繼操作,此時訊號燈自動減1,變成0個。那麼第二個執行緒呼叫sem_wait時就會阻塞在這兒了。第乙個執行緒完成列印後,呼叫sem_post釋放訊號燈,訊號燈數目變成1,將會喚醒等待的第二個執行緒,然後第二個執行緒接著列印。最後當所有任務完成後,主線程呼叫sem_destroy釋放這個訊號量。

執行緒同步機制之訊號量

一 什麼是訊號量 執行緒的訊號量與程序間通訊中使用的訊號量的概念是一樣,它是一種特殊的變數,它可以被增加或減少,但對其的關鍵訪問被保證是原子操作。如果乙個程式中有多個執行緒試圖改變乙個訊號量的值,系統將保證所有的操作都將依次進行。而只有0和1兩種取值的訊號量叫做二進位制訊號量,在這裡將重點介紹。而訊...

linux同步機制之訊號量down 和up

linux核心的訊號量在概念和原理上和使用者態的system v的ipc機制訊號量是相同的,不過他絕不可能在核心之外使用,因此他和system v的ipc機制訊號量毫不相干。訊號量在建立時需要設定乙個初始值,表示同時能有幾個任務能訪問該訊號量保護的共享資源,初始值為1就變成互斥鎖 mutex 即同時...

Linux多執行緒程式設計入門 同步機制 訊號量

int sem init sem t sem,int pshared,unsigned int value pshared 控制訊號量的型別,0表示這個訊號量是當前程序的區域性訊號量,否則,這個訊號量就可以在多個程序之間共享。value 訊號量的初始值。int sem post sem t sem ...