Semaphore怎么使用

本篇內(nèi)容介紹了“Semaphore怎么使用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

昆玉ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

每一個成熟的開發(fā)工具,都會附帶很多示例,用來說明工具本身和相關(guān)語言的用法。編程者往往會忽略這些例子而直奔自己的開發(fā)目標(biāo)?;旧线@也不是什么大問題,因為那些例子大多很簡單,用的時候看一下就行了。但是Qt中關(guān)于Semaphore的實例,卻是無論如何都不應(yīng)該忽略的。

代碼說明

全局變量

//數(shù)據(jù)量
const int DataSize = 100000;
//緩沖區(qū)大小
const int BufferSize = 8192;  
//緩沖區(qū)
char buffer[BufferSize];      
//緩沖區(qū)空閑空間Semaphore
QSemaphore freeBytes(BufferSize);  
//緩沖區(qū)數(shù)據(jù)Semaphore
QSemaphore usedBytes;         

寫數(shù)據(jù)線程

class Producer : public QThread
{
public:
 void run() override
 {
      for (int i = 0; i < DataSize; ++i) {
         freeBytes.acquire();
         buffer[i % BufferSize]
               = "ACGT"[(int)qrand() % 4];
         usedBytes.release();
     }
 }
};

首先略過兩個Semaphore來讀程序。run方法向緩沖區(qū)中寫入數(shù)據(jù)。由于buffer的下標(biāo)為i % BufferSize,所以這是一個循環(huán)隊列。

接下來看兩個Semaphore的用法。freeBytes是空閑領(lǐng)域關(guān)聯(lián)的Semaphore,只要循環(huán)隊列中有空閑空間,acquire就會順利通過,否則寫數(shù)據(jù)線程在acquire方法處發(fā)生阻塞。當(dāng)數(shù)據(jù)寫入成功以后,調(diào)用usedBytes的release方法,增加usedBytes的計數(shù)值。

讀數(shù)據(jù)線程

class Consumer : public QThread
{
public:
 void run() override
 {
     for (int i = 0; i < DataSize; ++i) {
         usedBytes.acquire();
         fprintf(stderr, "%c",    
                  buffer[i % BufferSize]);
         freeBytes.release();
     }
 }
};

run方法從循環(huán)隊列中讀數(shù)據(jù)。關(guān)鍵還是兩個Semaphore的用法。usedBytes是數(shù)據(jù)領(lǐng)域關(guān)聯(lián)的Semaphore,只用循環(huán)隊列中有數(shù)據(jù),acquire就會順利通過,否則讀數(shù)據(jù)線程在acquire方法處發(fā)生阻塞。當(dāng)數(shù)據(jù)讀出成功以后,調(diào)用freeBytes的release方法,增加freeBytes的計數(shù)值。

主程序

int main(int argc, char *argv[])
{
 Producer producer;
 Consumer consumer;
 producer.start();
 consumer.start();
 producer.wait();
 consumer.wait();
 return 0;
}

主程序很簡單,分別啟動兩個線程,然后就安靜地等待兩個線程結(jié)束。

“Semaphore怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

當(dāng)前文章:Semaphore怎么使用
網(wǎng)頁鏈接:http://muchs.cn/article10/ipijgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站排名、微信小程序、虛擬主機(jī)、移動網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)