訊號量可以理解為對互斥量功能的擴充套件,互斥量只能鎖定一次而訊號量可以獲取多次,它可以用來保護一定數量的同種資源。訊號量的典型用例是控制生產者/消費者之間共享的環形緩衝區。
生產者/消費者例項中對同步的需求有兩處:
(1)如果生產者過快地生產資料,將會覆蓋消費者還沒有讀取的資料。
(2)如果消費者過快地讀取資料,將越過生產者並且讀取到一些過期資料。
qsemaphore可使生產者和消費者執行緒同時分別操作緩衝區的不同部分,這是一種比較高效的方法。
main.cpp
#include
#include
#include
#include
const
int datasize=
1000
;const
int buffersize=80;
int buffer[buffersize]
;qsemaphore freebytes
(buffersize)
;//生產者可填充的緩衝區
qsemaphore usedbytes(0
);//消費者一開始沒有資料可讀取
class
producer
:public qthread//生產者
;producer::
producer()
void producer::
run()}
class
consumer
:public qthread//消費者
多執行緒 訊號量
訊號量 semaphore類 建立帶指定許可數的訊號量 semaphore semaphore new semaphore 1 建立乙個許可的訊號量 訊號量用來限制訪問共享數資源的執行緒數。在訪問資源之前,執行緒必須從訊號量獲取許可,在訪問完資源後釋放訊號量。任務通過呼叫訊號量的acquire 方法...
多執行緒通訊 訊號量
當當前資源的數量大於0的時候,等待訊號量的執行緒可以獲得乙個資源並繼續執行,訊號量的當前資源數量將減1,如果當前資源的數量為0,則等待訊號量的執行緒將處於等待狀態,直到有執行緒釋放訊號量,使訊號量標識的資源數量大於0 handle createsemaphore lpsecurity attribu...
多執行緒之訊號量
本文的訊號量型別為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...