Semaphore怎么使用
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇内容介绍了"Semaphore怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!每一个成熟的
千家信息网最后更新 2025年02月05日Semaphore怎么使用
本篇内容介绍了"Semaphore怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
每一个成熟的开发工具,都会附带很多示例,用来说明工具本身和相关语言的用法。编程者往往会忽略这些例子而直奔自己的开发目标。基本上这也不是什么大问题,因为那些例子大多很简单,用的时候看一下就行了。但是Qt中关于Semaphore的实例,却是无论如何都不应该忽略的。
代码说明
全局变量
//数据量
const int DataSize = 100000;
//缓冲区大小
const int BufferSize = 8192;
//缓冲区
char buffer[BufferSize];
//缓冲区空闲空间Semaphore
QSemaphore freeBytes(BufferSize);
//缓冲区数据Semaphore
QSemaphore usedBytes;
写数据线程
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方法向缓冲区中写入数据。由于buffer的下标为i % BufferSize,所以这是一个循环队列。
接下来看两个Semaphore的用法。freeBytes是空闲领域关联的Semaphore,只要循环队列中有空闲空间,acquire就会顺利通过,否则写数据线程在acquire方法处发生阻塞。当数据写入成功以后,调用usedBytes的release方法,增加usedBytes的计数值。
读数据线程
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方法从循环队列中读数据。关键还是两个Semaphore的用法。usedBytes是数据领域关联的Semaphore,只用循环队列中有数据,acquire就会顺利通过,否则读数据线程在acquire方法处发生阻塞。当数据读出成功以后,调用freeBytes的release方法,增加freeBytes的计数值。
主程序
int main(int argc, char *argv[])
{
Producer producer;
Consumer consumer;
producer.start();
consumer.start();
producer.wait();
consumer.wait();
return 0;
}
主程序很简单,分别启动两个线程,然后就安静地等待两个线程结束。
"Semaphore怎么使用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
数据
方法
线程
两个
缓冲区
缓冲
队列
循环
空闲
成功
主程序
例子
内容
工具
更多
知识
空间
读数
领域
关联
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我的世界失落世界服务器洞穴跑酷
迭代软件开发合同
哈尔滨互联网科技
一年级文明网络安全
智能家居软件开发项目介绍
linux服务器安装桌面
如何获取网络安全知识
pascal数据库
服务器内存 普通主板
PROTEUS下载软件开发
cs开发指纹仪软件开发
下拉框接收数据库数据显示
服务器未识别网络连接
数据库方向发论文
飞行安全基础数据库
企业网络技术部
华硕双路服务器游戏
app美团优选服务器错误403
服务器崩了要不要赔钱
临汾app软件开发
还无法连接到服务器
资金盘升级服务器是什么目的
爬虫数据库链接代码及解释
专科生学计算机网络技术
中科院有机物谱图数据库
江西有什么软件开发公司吗
网络安全法何时开始的
阿里云自带的数据库
shell服务器默认字符集
roblox进服务器