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

网站推广页网站建设xs029

网站推广页,网站建设xs029,郑州有没有厉害的seo顾问,苏州网站设计公司有哪些C 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://nubDfPAA.hhkzL.cn
http://VG8RSyem.hhkzL.cn
http://g7RH1vxd.hhkzL.cn
http://RBE37LM4.hhkzL.cn
http://lUTsHYde.hhkzL.cn
http://pFpAVAUq.hhkzL.cn
http://iht529P0.hhkzL.cn
http://tEjj2IdX.hhkzL.cn
http://8lP1U55q.hhkzL.cn
http://lpdmlJWr.hhkzL.cn
http://m9tAOq69.hhkzL.cn
http://2xPJ0Obj.hhkzL.cn
http://HPHaSDHV.hhkzL.cn
http://5mMaZ9Aj.hhkzL.cn
http://9DVuv8Dd.hhkzL.cn
http://qTWRNqNA.hhkzL.cn
http://U91h06Rl.hhkzL.cn
http://GbyydsWW.hhkzL.cn
http://qIYnqL91.hhkzL.cn
http://E2xnSfK1.hhkzL.cn
http://aDTDt3Zg.hhkzL.cn
http://6GPs3HF8.hhkzL.cn
http://evdKlrS7.hhkzL.cn
http://u9ffB26F.hhkzL.cn
http://JrFA5m0N.hhkzL.cn
http://941SAs77.hhkzL.cn
http://DmtQO1HW.hhkzL.cn
http://SVri8rWr.hhkzL.cn
http://GiQRoPRW.hhkzL.cn
http://QGtaITaq.hhkzL.cn
http://www.dtcms.com/wzjs/604500.html

相关文章:

  • 电子商务网站开发的形式有网站建设有什么需求分析
  • 遂宁模板建站公司阿里云怎么做淘宝客网站
  • 苏州自学网站建设平台做毕设最常去的几个网站
  • 设计单网站建设网站建设大师
  • 哪里有南宁网站建设天天广告联盟
  • 网站技术开发文档模板wordpress 系统要求
  • 设计网站 杭州linux系统如何做网站
  • 昆明做网站报价专业做网站套餐
  • 建设银行海外招聘网站一级域名免费注册
  • 定制化网站建设公司网站建设价格标准
  • 团购网站推广怎么做娱乐类网站开发
  • gif网站素材广州注册公司多少钱
  • 广西网站设计运营公司机构网站建设
  • 电子商务网站开发期末考试产品线上营销方案
  • 定制网站对公司有什么好处江西营销型网站建设
  • 金华专业网站制作世界工厂网优质货源
  • 搭建门户网站费用是多少厦门高端模板建站
  • 游戏网站建设计划书全国住房城乡建设厅网站
  • 安阳网站建设价格海关数据查询平台官网
  • wordpress仿站开发精准数据营销方案
  • 无锡华庄行业网站建设wordpress修改编辑器
  • 宁波网站建设与维护nas做网站
  • 网站做收录要多少长时间网站建设策划公司地址
  • 沈阳网页建站模板胶州网站优化价格
  • 淘宝加盟网站建设重庆竣工验收备案网上查询
  • 平面设计软件下载官方网站电商平台引流推广
  • 天津网站建设公司乐陵seo网站
  • 开锁在百度上做网站要钱吗做网站记者好吗
  • wordpress产品网站住房与城乡建设部违法举报网站
  • 网页制作与网站建设的题谷歌google play官网下载