当前位置: 首页 > news >正文

C++学习笔记(45)

322、循环队列、信号量、生产/消费者模型的源代码
一、demo1.cpp
// demo1.cpp,本程序演示循环队列的使用。
#include "_public.h"
int main()
{
using ElemType=int;
squeue<ElemType,5> QQ;
ElemType ee; // 创建一个数据元素。
cout << "元素(1、2、3)入队。\n";
ee=1; QQ.push(ee);
ee=2; QQ.push(ee);
ee=3; QQ.push(ee);
cout << "队列的长度是" << QQ.size() << endl;
QQ.printqueue();
ee=QQ.front(); QQ.pop(); cout << "出队的元素值为" << ee << endl;
ee=QQ.front(); QQ.pop(); cout << "出队的元素值为" << ee << endl;
cout << "队列的长度是" << QQ.size() << endl;
QQ.printqueue();
cout << "元素(11、12、13、14、15)入队。\n";
ee=11; QQ.push(ee);
ee=12; QQ.push(ee);
ee=13; QQ.push(ee);
ee=14; QQ.push(ee);
ee=15; QQ.push(ee);
cout << "队列的长度是" << QQ.size() << endl;
QQ.printqueue();
}
二、demo2.cpp
// demo2.cpp,本程序演示基于共享内存的循环队列。
#include "_public.h"
int main()
{
using ElemType=int;
// 初始化共享内存。
int shmid=shmget(0x5005, sizeof(squeue<ElemType,5>), 0640|IPC_CREAT);
if ( shmid ==-1 )
{
cout << "shmget(0x5005) failed.\n"; return -1;
}
// 把共享内存连接到当前进程的地址空间。
squeue<ElemType,5> *QQ=(squeue<ElemType,5> *)shmat(shmid,0,0);
if ( QQ==(void *)-1 )
{
cout << "shmat() failed\n"; return -1;
}
QQ->init(); // 初始化循环队列。
ElemType ee; // 创建一个数据元素。
cout << "元素(1、2、3)入队。\n";
ee=1; QQ->push(ee);
ee=2; QQ->push(ee);
ee=3; QQ->push(ee);
cout << "队列的长度是" << QQ->size() << endl;
QQ->printqueue();
ee=QQ->front(); QQ->pop(); cout << "出队的元素值为" << ee << endl;
ee=QQ->front(); QQ->pop(); cout << "出队的元素值为" << ee << endl;
cout << "队列的长度是" << QQ->size() << endl;
QQ->printqueue();
cout << "元素(11、12、13、14、15)入队。\n";
ee=11; QQ->push(ee);
ee=12; QQ->push(ee);
ee=13; QQ->push(ee);
ee=14; QQ->push(ee);
ee=15; QQ->push(ee);
cout << "队列的长度是" << QQ->size() << endl;
QQ->printqueue();
shmdt(QQ); // 把共享内存从当前进程中分离。
}
三、demo3.cpp
// demo3.cpp,本程序演示用信号量给共享内存加锁。
#include "_public.h" struct stgirl // 超女结构体。
{
int no; // 编号。
char name[51]; // 姓名,注意,不能用 string。
};
int main(int argc,char *argv[])
{
if (argc!=3) { cout << "Using:./demo no name\n"; return -1; }
// 第 1 步:创建/获取共享内存,键值 key 为 0x5005,也可以用其它的值。
int shmid=shmget(0x5005, sizeof(stgirl), 0640|IPC_CREAT);
if ( shmid ==-1 )
{
cout << "shmget(0x5005) failed.\n"; return -1;
}
cout << "shmid=" << shmid << endl;
// 第 2 步:把共享内存连接到当前进程的地址空间。
stgirl *ptr=(stgirl *)shmat(shmid,0,0);
if ( ptr==(void *)-1 )
{
cout << "shmat() failed\n"; return -1;
}
// 创建、初始化二元信号量。
csemp mutex;
if (mutex.init(0x5005)==false)
{
cout << "mutex.init(0x5005) failed.\n"; return -1;
}
cout << "申请加锁...\n";
mutex.wait(); // 申请加锁。
cout << "申请加锁成功。\n";
// 第 3 步:使用共享内存,对共享内存进行读/写。
cout << "原值:no=" << ptr->no << ",name=" << ptr->name << endl; // 显示共享内存
中的原值。
ptr->no=atoi(argv[1]); // 对超女结构体的 no 成员赋值。
strcpy(ptr->name,argv[2]); // 对超女结构体的 name 成员赋值。
cout << "新值:no=" << ptr->no << ",name=" << ptr->name << endl; // 显示共享内存
中的当前值。
sleep(10);
mutex.post(); // 解锁。
cout << "解锁。\n";
// 查看信号量 :ipcs -s // 删除信号量 :ipcrm sem 信号量 id
// 查看共享内存:ipcs -m // 删除共享内存:ipcrm -m 共享内存 id
// 第 4 步:把共享内存从当前进程中分离。
shmdt(ptr);
// 第 5 步:删除共享内存。
//if (shmctl(shmid,IPC_RMID,0)==-1)
//{
// cout << "shmctl failed\n"; return -1;
//}
}
 

相关文章:

C++学习笔记(45)

322、循环队列、信号量、生产/消费者模型的源代码 一、demo1.cpp // demo1.cpp&#xff0c;本程序演示循环队列的使用。 #include "_public.h" int main() { using ElemTypeint; squeue<ElemType,5> QQ; ElemType ee; // 创建一个数据元素。 cout << &qu…...

【2】图像视频的加载和显示

文章目录 【2】图像视频的加载和显示一、代码在哪写二、创建和显示窗口&#xff08;一&#xff09;导入OpenCV的包cv2&#xff08;二&#xff09;创建窗口&#xff08;三&#xff09;更改窗口大小 & 显示窗口&#xff08;四&#xff09;等待用户输入补充&#xff1a;ord()函…...

1. BOOT.BIN 2. 固化 3. 启动 4. SDK 5. 文件

在进行FPGA的开发与固化过程中&#xff0c;生成BOOT.BIN文件是一个重要的步骤。BOOT.BIN文件通常包含了系统启动所需的不同文件&#xff0c;以下是如何创建和使用该文件的详细说明。 ### 生成BOOT.BIN文件的步骤 1. **方法一&#xff1a;通过项目构建** - 右键单击项目&#xf…...

vue按钮接收键盘回车事件

了解了&#xff01;如果您想让 Submit 按钮在按下回车键时被触发&#xff0c;可以在 Vue 组件中监听全局的键盘事件。以下是实现这一功能的示例&#xff1a; 示例代码 <template><div><inputtype"text"v-model"inputValue"placeholder&qu…...

腾讯云点播及声音上传

文章目录 1、开通腾讯云点播2、获取腾讯云API密钥3、完成声音上传3.1、引入依赖3.2、参考&#xff1a;接入点地域3.3、参考&#xff1a;任务流设置3.4、首先修改配置&#xff1a;3.4.1、 3.5、TrackInfoApiController --》 uploadTrack()3.6、VodServiceImpl --》 uploadTrack(…...

如何查看服务器是否有raid阵列卡以及raid类型

要查看服务器是否配置了RAID阵列卡以及RAID的类型&#xff0c;可以使用多种方法。以下是一些常用的命令和步骤&#xff1a; 1. 使用 lspci 命令 这个命令可以列出所有的PCI设备&#xff0c;包括RAID控制器。 lspci | grep -i raid 如果输出中有RAID相关的设备信息&#xff0c;那…...

工博会动态 | 来8.1馆 看桥田如何玩转全场

北京时间2024年9月24日&#xff0c;中国国际工业博览会开幕&#xff0c;桥田智能&#xff08;8.1馆A001&#xff09;推出心意三重奏&#xff0c;有没有小伙伴们发现呢&#xff1f;现在&#xff0c;让我们一起city walk下&#xff01; 桥田显眼包横空出道 有小伙伴已经发现&…...

新版torch_geometric不存在uniform、maybe_num_nodes函数问题(Prune4ED论文报错解决)

这是在复现论文“Towards accurate subgraph similarity computation via neural graph pruning”时遇到的报错。 ImportError: cannot import name uniform from torch_geometric.nn.pool.topk_pool 一、报错原因 论文作者使用的是2.1.0版本的torch_geometric。而我安装了2.…...

实现简易 vuedraggable 的拖拽排序功能

一、案例效果 拖拽计数4实现手动排序 二、案例代码 <draggable:list"searchResult.indicator":group"{ name: indicators }"item-key"field"handle".drag-handle-icon"><divclass"field-item"v-for"(item…...

第L2周:机器学习|线性回归模型 LinearRegression:2. 多元线性回归模型

本文为365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 任务&#xff1a; ●1. 学习本文的多元线形回归模型。 ●2. 参考文本预测花瓣宽度的方法&#xff0c;选用其他三个变量来预测花瓣长度。 一、多元线性回归 简单线性回归&#xff1a;影响 Y 的因素唯一&…...

JavaScript的条件语句

if条件语句 if结构先判断一个表达式的布尔值&#xff0c;然后根据布尔值的真伪&#xff0c;执行不同的语句。所谓布尔值&#xff0c;指的是JavaScript 的两个特殊值&#xff0c;true表示真&#xff0c;false表示伪。 if语句语法规范 if(布尔值){语句;}var m3if(m3){console.l…...

vue3 vite模式配置测试,开发、生产环境以及代理配置

1、首先在根目录下创建三个文本文件&#xff1a;.env.development&#xff0c;.env.production&#xff0c;.env.test .env.development中的内容为&#xff1a; // 开发环境 .env.development NODE_ENV development VITE_APP_MODE development VITE_OUTPUTDIR dist_dev /…...

【rabbitmq-server】安装使用介绍

在 1050a 系统下安装 rabbitmq-server 服务以及基本配置;【注】:改方案用于A版统信服务器操作系统 文章目录 功能概述功能介绍一、安装软件包二、启动服务三、验证四、基本配置功能概述 RabbitMQ 是AMQP的实现,高性能的企业消息的新标准。RabbitMQ服务器是一个强大和可扩展…...

Kafka系列之:安装部署CMAK,CMAK管理大型Kafka集群参数调优

Kafka系列之:安装部署CMAK,CMAK管理大型Kafka集群参数调优 一、CMAK二、要求三、配置四、启动服务五、使用 Security 启动服务六、消费者/生产者滞后七、从 Kafka Manager 迁移到 CMAK八、CMAK管理大型Kafka集群参数调优九、后台运行CMAK十、输出日志一、CMAK CMAK(之前称为…...

c语言200例 64

大家好&#xff0c;欢迎来到无限大的频道。 今天带领大家来学习c语言。 题目要求&#xff1a; 设计一个进行候选人的选票程序。假设有三位候选人&#xff0c;在屏幕上输入要选择的候选人姓名&#xff0c; 有10次投票机会&#xff0c;最后输出每个人的得票结果。好的&#xff…...

[leetcode]216_组合总和III_给定数字范围且输出无重复

找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 解释: 1…...

Doris 2.x 安装及使用

Doris 2.x 安装及使用 简介 Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以高效、简单、统一的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持…...

MySQL字符集设置

MySQL字符集设置 一、查看当前配置的字符集 \s;示例 MariaDB [(none)]> \s -------------- mysql Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1Connection id: 11 Current database: Current user: rootlocalhost SSL: …...

深度学习模型量化

模型量化是深度学习领域中的一项重要技术&#xff0c;它通过降低模型参数的精度&#xff0c;将浮点数转换为整数或定点数&#xff0c;从而实现模型的压缩和优化。以下是进行模型量化的详细步骤和注意事项&#xff1a; 一、模型量化的基本步骤 选择量化方法 后训练量化&#xf…...

红黑树和B+树

红黑树和B树是两种常用的自平衡数据结构&#xff0c;适用于不同的应用场景和需求。下面是对这两种树的详细比较和描述&#xff1a; 红黑树 基本结构&#xff1a; 红黑树是一种自平衡的二叉搜索树&#xff08;Binary Search Tree&#xff09;&#xff0c;其中每个节点都有一个颜…...

3步实现Mac微信防撤回:零配置本地化解决方案

3步实现Mac微信防撤回&#xff1a;零配置本地化解决方案 【免费下载链接】WeChatIntercept 微信防撤回插件&#xff0c;一键安装&#xff0c;仅MAC可用&#xff0c;支持v3.7.0微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 告别消息遗憾&#xff1…...

深度学习项目训练环境体验:基于专栏的实战环境,快速验证模型

深度学习项目训练环境体验&#xff1a;基于专栏的实战环境&#xff0c;快速验证模型 1. 环境概述与核心价值 深度学习项目开发过程中&#xff0c;环境配置往往是最耗时且最容易出问题的环节。本镜像基于《深度学习项目改进与实战》专栏预置了完整的开发环境&#xff0c;让开发…...

多无人机协同打击任务分配方法

随着无人机技术的不断成熟和完善&#xff0c;其军事应用的优势日益显现&#xff0c;近年来其在军事冲突中 所发挥的作用更使人们认识到&#xff0c;无人机在未来战争中将成为重要的军事装备。随着无人机在军 事中的大量应用&#xff0c;无人机集群协同执行任务将成为典型的应用…...

抖音直播数据抓取实战:零基础掌握直播间弹幕分析技术

抖音直播数据抓取实战&#xff1a;零基础掌握直播间弹幕分析技术 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取&#xff08;2024最新版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 想要获取抖音直播间的…...

AI做表工具三强对决:Excel-Agent、ChatExcel、Excel 原生 Agent,谁才是职场数据处理真王者?

当 AI 遇上 Excel&#xff0c;传统制表、数据清洗、复杂分析的低效困局被彻底打破。当前市场上&#xff0c;Excel-Agent、ChatExcel、Excel 原生 Agent 模式 是 AI 表格领域的三大主流选择&#xff0c;但三者在技术逻辑、使用体验、数据安全、实战效能上差异显著。作为专为 Exc…...

SDXL 1.0绘图工坊环境部署:Ubuntu+conda+4090驱动适配完整流程

SDXL 1.0绘图工坊环境部署&#xff1a;Ubuntuconda4090驱动适配完整流程 1. 环境准备与系统要求 在开始部署SDXL 1.0绘图工坊之前&#xff0c;需要确保你的硬件和软件环境满足以下要求&#xff1a; 硬件要求&#xff1a; 显卡&#xff1a;NVIDIA RTX 4090&#xff08;24GB显…...

基于yz-bijini-cosplay的.NET应用开发:AI功能集成实践

基于yz-bijini-cosplay的.NET应用开发&#xff1a;AI功能集成实践 1. 为什么要在.NET应用里集成cosplay风格生成能力 最近有好几位做数字内容平台的朋友问我&#xff1a;“我们给动漫爱好者提供社区服务&#xff0c;能不能在自己的App里直接生成角色同款泳装或Cosplay造型&am…...

微信聊天记录永久保存:WeChatExporter开源工具全流程指南

微信聊天记录永久保存&#xff1a;WeChatExporter开源工具全流程指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 问题&#xff1a;数据丢失的三重警示 2023年某科技…...

GTE-Pro物流应用:运单文本的智能处理

GTE-Pro物流应用&#xff1a;运单文本的智能处理 1. 物流行业的文本处理挑战 每天&#xff0c;物流公司都要处理海量的运单文本和客服对话。这些文本数据里藏着宝贵的信息&#xff0c;但传统的关键词匹配方法往往力不从心。 想象一下这样的场景&#xff1a;一个运单上写着&q…...

bert-base-chinese详细步骤:如何将test.py改造成支持流式文本处理的微服务

bert-base-chinese详细步骤&#xff1a;如何将test.py改造成支持流式文本处理的微服务 1. 项目背景与价值 在实际的工业场景中&#xff0c;我们经常需要处理大量的文本数据流。传统的批处理方式虽然简单&#xff0c;但无法满足实时性要求高的应用场景。比如智能客服系统需要实…...