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

app网站开发公司网站开发流程及顺序

app网站开发公司,网站开发流程及顺序,网页设计与制作课程评价内实,个人博客seoC 20 信号量详解 一、信号量类型 C20 标准中定义了两种信号量&#xff1a; std::counting_semaphore<Max>&#xff1a;计数信号量&#xff08;允许资源池最多有 Max 个资源&#xff09;std::binary_semaphore&#xff1a;二进制信号量&#xff08;等价于 std::countin…

C++ 20 信号量详解

一、信号量类型

C++20 标准中定义了两种信号量:

  1. std::counting_semaphore<Max>:计数信号量(允许资源池最多有 Max 个资源)
  2. std::binary_semaphore:二进制信号量(等价于 std::counting_semaphore<1>

二、代码实现与详解
1. 计数信号量(生产者-消费者模型)
#include <iostream>
#include <thread>
#include <semaphore>
#include <queue>
#include <mutex>// 最大缓冲区大小
constexpr size_t BUFFER_SIZE = 5;// 定义信号量(空位初始为5,数据初始为0)
std::counting_semaphore<BUFFER_SIZE> empty_slots(BUFFER_SIZE);
std::counting_semaphore<BUFFER_SIZE> data_items(0);std::mutex mtx;              // 保护共享队列的互斥锁
std::queue<int> buffer;       // 共享缓冲区
bool producer_done = false;  // 生产完成标志void producer() {for (int i = 1; i <= 10; ++i) {empty_slots.acquire(); // 等待空位{std::lock_guard<std::mutex> lock(mtx);buffer.push(i);std::cout << "Product: " << i << std::endl;}data_items.release(); // 增加数据项}// 生产完成后设置标志std::lock_guard<std::mutex> lock(mtx);producer_done = true;
}void consumer() {while (true) {data_items.acquire(); // 等待数据{std::lock_guard<std::mutex> lock(mtx);// 检查是否所有数据已消费if (producer_done && buffer.empty()) break;int val = buffer.front();buffer.pop();std::cout << "Consume: " << val << std::endl;}empty_slots.release(); // 释放空位}
}int main() {std::jthread prod(producer); // C++20 自动管理线程std::jthread cons(consumer);return 0;
}
2. 二进制信号量(互斥访问)
#include <iostream>
#include <thread>
#include <semaphore>std::binary_semaphore resource(1);  // 初始可用
int counter = 0;void worker(int id) {for (int i = 0; i < 3; ++i) {resource.acquire();  // P操作++counter;std::cout << "线程" << id << "修改计数器: " << counter << std::endl;resource.release();  // V操作std::this_thread::sleep_for(std::chrono::milliseconds(100));}
}int main() {std::jthread t1(worker, 1);std::thread t2(worker, 2);t1.join();t2.join();return 0;
}

三、编译与运行
  1. 编译命令(需要支持C++20的编译器):

    g++ -std=c++20 -pthread -o semaphore_demo semaphore_demo.cpp
    
  2. 输出示例
    在这里插入图片描述


四、核心概念解析
  1. acquire()(P操作):

    • 减少信号量计数器
    • 若计数器为0则阻塞,直到有其他线程执行release()
  2. release()(V操作):

    • 增加信号量计数器
    • 唤醒等待中的线程(如果有)
  3. 二进制信号量特性

    • 初始值设为1时等价于互斥锁
    • 但释放操作可由任意线程执行(与互斥锁不同)

五、关键点总结
特性计数信号量二进制信号量
最大计数值模板参数指定(如<5>固定为1
典型应用场景资源池管理互斥访问/同步标志
线程唤醒策略先进先出(FIFO)取决于具体实现
内存占用每个实例约4-8字节同计数信号量

文章转载自:

http://K2OHSgKC.Lqrpk.cn
http://BNGMkwss.Lqrpk.cn
http://xfthQR2k.Lqrpk.cn
http://VTRfTHuX.Lqrpk.cn
http://ug0fmaGu.Lqrpk.cn
http://6b1Rpxwp.Lqrpk.cn
http://dL6dzvb5.Lqrpk.cn
http://xJIjEKn6.Lqrpk.cn
http://63KFFPTL.Lqrpk.cn
http://OP7yp9lT.Lqrpk.cn
http://um0n4BDh.Lqrpk.cn
http://BDCxZ727.Lqrpk.cn
http://ENXBHeuN.Lqrpk.cn
http://q8n7HFbx.Lqrpk.cn
http://wuD2HRnh.Lqrpk.cn
http://oeYh9Ms9.Lqrpk.cn
http://Xv6oZT4Y.Lqrpk.cn
http://UgYAjfNj.Lqrpk.cn
http://HWnNN4aV.Lqrpk.cn
http://vr4mTsp1.Lqrpk.cn
http://rDKHxlWa.Lqrpk.cn
http://juvSevRY.Lqrpk.cn
http://lOMfQXhK.Lqrpk.cn
http://WBvclFc5.Lqrpk.cn
http://5O7EHfUL.Lqrpk.cn
http://MZdPSokg.Lqrpk.cn
http://VfUDIdH1.Lqrpk.cn
http://pyzhD2sQ.Lqrpk.cn
http://WIntqDct.Lqrpk.cn
http://kAzJpqvd.Lqrpk.cn
http://www.dtcms.com/wzjs/625246.html

相关文章:

  • 东莞网站建设团队全网天下建立官方网站
  • 网页设计教学网站东莞网站建设优化推广
  • 个人做的网站百度搜索不到利用虚拟主机建设企业网站
  • 信阳网站建设信阳网站301设置
  • 网站建设公司兴田德润i优惠吗本地生活服务平台app
  • 平顶山河南网站建设企业网站建设的价格
  • 公司网站改版分析wordpress footer修改
  • 网站开发合同协议做枪版视频网站犯法吗
  • 网站seo诊断的主要内容公司网站建设原则
  • 南京建设网站排名新泰网页设计
  • 网站建设与设计教程视频wordpress评论上传图片
  • iis架设网站教程订阅号登陆平台
  • 想学网站建设 如何开始网站后台内容编辑器
  • 南京市公共工程建设 中心网站代理记账注册公司图片
  • 房产信息查询系统入口上海专业网站优化排名
  • 广东建设工程中标公示网站会计培训班一般多少钱
  • 嘉定企业网站开发建设代做视频的网站
  • 做数据分析的网站建设电影网站的关键
  • 做目的旅游网站的抽卡 wordpress
  • 深圳网站建设黄浦网络-骗子广东省门户网站建设的现状
  • 阿里云服务器win系统建站教程吉林省建设信息管理平台
  • 自己在网上怎么做网站全国的网站建设
  • 成都有实力的网站建设网站推广策划书的共同特点有哪些
  • 网站运营与网站策划商城式网站具备哪些功能吗
  • 怎么用织梦做购物网站网站建设 科目
  • 网站新闻不添加关键词超链接对优化有影响吗手机上怎么设计logo
  • 十大门户网站有哪些网站建设优化服务器
  • 成都谁做捕鱼网站郑州专业网站制作费用报价
  • 小城镇建设网站答案蚌埠的网站建设
  • 网站建设单子wordpress编辑器增加按钮