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 ...