Linux 之 訊號量

2021-10-09 10:23:53 字數 1433 閱讀 6857

sem_init函式

sem_destroy函式

sem_wait函式

sem_trywait函式

sem_timedwait函式

sem_post函式

以上6 個函式的返回值都是:成功返回0, 失敗返回-1,同時設定errno。(注意,它們沒有pthread字首)

sem_init

int sem_init(sem_t *sem, int pshared, unsigned int value);

引數:

sem:訊號量

pshared:取0用於執行緒間;取非0(一般為1)用於程序間

value:指定訊號量初值

sem_destroy

int sem_destroy(sem_t *sem);

sem_wait

int sem_wait(sem_t *sem);

若訊號量值》0,對其-1,為0阻塞。

sem_trywait

int sem_trywait(sem_t *sem);

若訊號量值》0,對其-1,為0直接返回。

sem_timedwait

int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);

若訊號量值》0,對其-1,為0阻塞,超時返回。

sem_post

int sem_post(sem_t *sem);

對訊號量值+1。

#include

#include

#include

#include

#include

#include

#include

#include

#include

sem_t source;

sem_t mutex;

int total =

10000

;void

str_error()

void

*fun

(void

* arg)

sem_wait

(&source)

;printf

("thread[%ld] used %d\n"

,pthread_self()

,total--);

sem_post

(&mutex);}

return

null;}

intmain()

for(

int i=

0;i<

2;i++

)sem_destroy

(&source)

;sem_destroy

(&mutex)

;}

linux同步之訊號量

1.什麼是訊號量 linux sem 訊號量是一種特殊的變數,訪問具有原子性,用於解決程序或執行緒間共享資源引發的同步問題。使用者態程序對 sem 訊號量可以有以下兩種操作 等待訊號量 當訊號量值為 0 時,程式等待 當訊號量值大於 0 時,訊號量減 1,程式繼續執行。傳送訊號量 將訊號量值加 1 ...

linux 之 system v 訊號量

計數器,記錄可以訪問共享資源的次數。保護共享資源 硬體裝置,檔案,共享記憶體等等 訊號量大於0,則可以訪問 訊號量等於0,則不可以訪問。訪問時會將訊號量減1,訪問完成會將訊號量加1。加1減1可由使用者控制 訊號量減小到0之後,程序就不能去訪問共享資源了。int semget key t key,in...

IPC之 訊號量集 多個訊號量

如果兩個程序不僅需要同步,還要保證先後執行順序,就要用兩個訊號量 互斥鎖 來解決 柵欄模型 實現以下框架中的四個子程序 所有程序做完任務後 在一起執行下一次 include include include include include include include include define ...