本篇內(nèi)容介紹了“Semaphore怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
昆玉ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
每一個(gè)成熟的開發(fā)工具,都會(huì)附帶很多示例,用來說明工具本身和相關(guān)語言的用法。編程者往往會(huì)忽略這些例子而直奔自己的開發(fā)目標(biāo)?;旧线@也不是什么大問題,因?yàn)槟切├哟蠖嗪芎?jiǎn)單,用的時(shí)候看一下就行了。但是Qt中關(guān)于Semaphore的實(shí)例,卻是無論如何都不應(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();
}
}
};
首先略過兩個(gè)Semaphore來讀程序。run方法向緩沖區(qū)中寫入數(shù)據(jù)。由于buffer的下標(biāo)為i % BufferSize,所以這是一個(gè)循環(huán)隊(duì)列。
接下來看兩個(gè)Semaphore的用法。freeBytes是空閑領(lǐng)域關(guān)聯(lián)的Semaphore,只要循環(huán)隊(duì)列中有空閑空間,acquire就會(huì)順利通過,否則寫數(shù)據(jù)線程在acquire方法處發(fā)生阻塞。當(dāng)數(shù)據(jù)寫入成功以后,調(diào)用usedBytes的release方法,增加usedBytes的計(jì)數(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)隊(duì)列中讀數(shù)據(jù)。關(guān)鍵還是兩個(gè)Semaphore的用法。usedBytes是數(shù)據(jù)領(lǐng)域關(guān)聯(lián)的Semaphore,只用循環(huán)隊(duì)列中有數(shù)據(jù),acquire就會(huì)順利通過,否則讀數(shù)據(jù)線程在acquire方法處發(fā)生阻塞。當(dāng)數(shù)據(jù)讀出成功以后,調(diào)用freeBytes的release方法,增加freeBytes的計(jì)數(shù)值。
主程序
int main(int argc, char *argv[])
{
Producer producer;
Consumer consumer;
producer.start();
consumer.start();
producer.wait();
consumer.wait();
return 0;
}
主程序很簡(jiǎn)單,分別啟動(dòng)兩個(gè)線程,然后就安靜地等待兩個(gè)線程結(jié)束。
“Semaphore怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
當(dāng)前文章:Semaphore怎么使用
網(wǎng)頁鏈接:http://jinyejixie.com/article10/ipijgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站排名、微信小程序、虛擬主機(jī)、移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)