#include <QCoreApplication>
#include <thread>
#include <QSemaphore>
#include <iostream>
const int DataSize = 50; // 要生产/消费的数据量
const int BUFSIZE = 5; // 缓冲区/队列大小
int buff[BUFSIZE] = {0}; // 缓冲区/队列
QSemaphore freeBuffer(BUFSIZE); // 可生产的信号量,默认队列空,所以可生产BUFSIZE
QSemaphore usedBuffer; // 可消费的信号两,默认队列空,没有可消费的,所以初始0
// 生产
void producer()
{
for(int i = 0 ; i < DataSize; ++i)
{
freeBuffer.acquire(); // 初始值为BUFSIZE,可生产-1(默认参数1),如果条件值为0,阻塞。
buff[i % BUFSIZE] = i + 1; // 生产,向队列填充数据
std::cout << std::this_thread::get_id() << " producer num : " << i + 1 << std::endl;
usedBuffer.release(); // 可消费+1(默认参数1)
}
}
// 消费
void consumer()
{
for(int i = 0; i < DataSize; ++i)
{
usedBuffer.ac
Qt_线程同步_信号量_QSemaphore
最新推荐文章于 2022-02-21 22:14:10 发布