本篇內(nèi)容介紹了“Semaphore怎么使用”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(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)。基本上這也不是什么大問題,因?yàn)槟切├哟蠖嗪芎唵?,用的時候看一下就行了。但是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();
}
}
};
首先略過兩個Semaphore來讀程序。run方法向緩沖區(qū)中寫入數(shù)據(jù)。由于buffer的下標(biāo)為i % BufferSize,所以這是一個循環(huán)隊(duì)列。
接下來看兩個Semaphore的用法。freeBytes是空閑領(lǐng)域關(guān)聯(lián)的Semaphore,只要循環(huán)隊(duì)列中有空閑空間,acquire就會順利通過,否則寫數(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)鍵還是兩個Semaphore的用法。usedBytes是數(shù)據(jù)領(lǐng)域關(guān)聯(lián)的Semaphore,只用循環(huán)隊(duì)列中有數(shù)據(jù),acquire就會順利通過,否則讀數(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é)束。
“Semaphore怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!