執行緒之訊號量的使用

2021-09-10 02:00:53 字數 988 閱讀 9039

1.訊號量常用函式

執行緒訊號量初始化函式:sem_init(sem_t* sem,int share,unsigned int value);//第二個引數不為0表示訊號量可以在程序間共享否則只能在多執行緒之間共享。

執行緒訊號量銷毀函式:sem_destroy(sem_t * sem)    

執行緒訊號量增加函式:sem_post(sem_t*sem)              //每次增加1

執行緒訊號量等待函式:sem_wait()                                   //每次減小1,如果為0則阻塞到大於0為止

sleep()和usleep()                            //將程序掛起一定時間,前者為秒,後者為微秒

2.測試**

#include#include#include#includevoid* producter_f(void *arg);

void* consumer_f(void *arg);

sem_t sem; //訊號量

int running=1;

int main()

void* consumer_f(void*arg)

printf("consumer process is end!!!!!!!!!!!!!!!!!!!!!!\n");

}void*producter_f(void*arg)

printf("producter process is end!!!!!!!!!!!!!!!!!!!!!!\n");

}

3.執行結果

很清楚可以看到,生產者和消費者兩個執行緒在未結束之前爭奪cpu使用權。

多執行緒之訊號量

本文的訊號量型別為posix無名訊號量 1 訊號量基礎知識 2 訊號量的主要用到的函式 int sem init sem t sem,int pshared,unsigned int value int sem destroy sem t sem int sem wait sem t sem int...

多執行緒之訊號量 Samephore

訊號量相當於乙個計數器,記錄乙個共享資源被訪問執行緒的個數 好比有兩個或者更多個辦事視窗,他們都做同一件事 假設有5個視窗,五個視窗都沒人訪問的時候計數器為5 有乙個視窗被占用計數器減1,為4 全部被占用則計數器為0 這時候其他人想要訪問就必須等待占用結束後計數器加1 handle winapi c...

多執行緒之使用互斥訊號量Sample

code author lin yiqian created 2009 09 16 describe 執行緒結束時會自動釋放互斥量 演示 include include using namespace std dword winapi threadfun lpvoid lpparameter han...