QT多執行緒(訊號量QSemaphore的使用)

2021-10-05 08:26:04 字數 1048 閱讀 1482

訊號量可以理解為對互斥量功能的擴充套件,互斥量只能鎖定一次而訊號量可以獲取多次,它可以用來保護一定數量的同種資源。訊號量的典型用例是控制生產者/消費者之間共享的環形緩衝區。

生產者/消費者例項中對同步的需求有兩處:

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