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

外贸搜素网站PPT做音乐网站介绍

外贸搜素网站,PPT做音乐网站介绍,paypal客户端网站建设评价,成都网站制作是什么243、条件变量-生产消费者模型 条件变量是一种线程同步机制。当条件不满足时#xff0c;相关线程被一直阻塞#xff0c;直到某种条件出现#xff0c;这些线 程才会被唤醒。 C11 的条件变量提供了两个类#xff1a; condition_variable#xff1a;只支持与普通 mutex 搭配相关线程被一直阻塞直到某种条件出现这些线 程才会被唤醒。 C11 的条件变量提供了两个类 condition_variable只支持与普通 mutex 搭配效率更高。 condition_variable_any是一种通用的条件变量可以与任意 mutex 搭配包括用户自定义的锁 类型。 包含头文件condition_variable 一、condition_variable 类 主要成员函数 1condition_variable() 默认构造函数。 2condition_variable(const condition_variable )delete 禁止拷贝。 3condition_variable condition_variable::operator(const condition_variable )delete 禁止赋值。 4notify_one() 通知一个等待的线程。 5notify_all() 通知全部等待的线程。 6wait(unique_lockmutex lock) 阻塞当前线程直到通知到达。 7wait(unique_lockmutex lock,Pred pred) 循环的阻塞当前线程直到通知到达且谓词满足。 8wait_for(unique_lockmutex lock,时间长度) 9wait_for(unique_lockmutex lock,时间长度,Pred pred) 10wait_until(unique_lockmutex lock,时间点) 11wait_until(unique_lockmutex lock,时间点,Pred pred) 二、unique_lock 类 template class Mutex class unique_lock 是模板类模板参数为互斥锁类型。 unique_lock 和 lock_guard 都是管理锁的辅助类都是 RAII 风格在构造时获得锁在析构时释放 锁。它们的区别在于为了配合 condition_variableunique_lock 还有 lock()和 unlock()成员函数。 示例 1 #include iostream #include string #include thread // 线程类头文件。 #include mutex // 互斥锁类的头文件。 #include deque // deque 容器的头文件。 #include queue // queue 容器的头文件。 #include condition_variable // 条件变量的头文件。 using namespace std; class AA { mutex m_mutex; // 互斥锁。 condition_variable m_cond; // 条件变量。 queuestring, dequestring m_q; // 缓存队列底层容器用 deque。 public: void incache(int num) // 生产数据num 指定数据的个数。 { lock_guardmutex lock(m_mutex); // 申请加锁。 for (int ii0 ; iinum ; ii) { static int bh 1; // 超女编号。 string message to_string(bh) 号超女; // 拼接出一个数据。 m_q.push(message); // 把生产出来的数据入队。 } m_cond.notify_one(); // 唤醒一个被当前条件变量阻塞的线程。 } void outcache() // 消费者线程任务函数。 { while (true) { string message; { // 把互斥锁转换成 unique_lockmutex并申请加锁。 unique_lockmutex lock(m_mutex); while (m_q.empty()) // 如果队列空进入循环否则直接处理数据。必须用 循环不能用 if m_cond.wait(lock); // 等待生产者的唤醒信号。 // 数据元素出队。 message m_q.front(); m_q.pop(); } // 处理出队的数据把数据消费掉。 this_thread::sleep_for(chrono::milliseconds(1)); // 假设处理数据需要 1 毫秒。 cout 线程 this_thread::get_id() message endl; } } }; int main() { AA aa; thread t1(AA::outcache, aa); // 创建消费者线程 t1。 thread t2(AA::outcache, aa); // 创建消费者线程 t2。 thread t3(AA::outcache, aa); // 创建消费者线程 t3。 this_thread::sleep_for(chrono::seconds(2)); // 休眠 2 秒。 aa.incache(3); // 生产 3 个数据。 this_thread::sleep_for(chrono::seconds(3)); // 休眠 3 秒。 aa.incache(5); // 生产 5 个数据。 t1.join(); // 回收子线程的资源。 t2.join(); t3.join(); } 示例 2 #include iostream #include string #include thread // 线程类头文件。 #include mutex // 互斥锁类的头文件。 #include deque // deque 容器的头文件。 #include queue // queue 容器的头文件。 #include condition_variable // 条件变量的头文件。 using namespace std; class AA { mutex m_mutex; // 互斥锁。 condition_variable m_cond; // 条件变量。 queuestring, dequestring m_q; // 缓存队列底层容器用 deque。 public: void incache(int num) // 生产数据num 指定数据的个数。 { lock_guardmutex lock(m_mutex); // 申请加锁。 for (int ii0 ; iinum ; ii) { static int bh 1; // 超女编号。 string message to_string(bh) 号超女; // 拼接出一个数据。 m_q.push(message); // 把生产出来的数据入队。 } //m_cond.notify_one(); // 唤醒一个被当前条件变量阻塞的线程。 m_cond.notify_all(); // 唤醒全部被当前条件变量阻塞的线程。 } void outcache() { // 消费者线程任务函数。 while (true) { // 把互斥锁转换成 unique_lockmutex并申请加锁。 unique_lockmutex lock(m_mutex); // 条件变量虚假唤醒消费者线程被唤醒后缓存队列中没有数据。 //while (m_q.empty()) // 如果队列空进入循环否则直接处理数据。必须用循 环不能用 if // m_cond.wait(lock); // 1把互斥锁解开2阻塞等待被唤醒3给互斥 锁加锁。 m_cond.wait(lock, [this] { return !m_q.empty(); }); // 数据元素出队。 string message m_q.front(); m_q.pop(); cout 线程 this_thread::get_id() message endl; lock.unlock(); // 手工解锁。 // 处理出队的数据把数据消费掉。 this_thread::sleep_for(chrono::milliseconds(1)); // 假设处理数据需要 1 毫秒。 } } }; int main() { AA aa; thread t1(AA::outcache, aa); // 创建消费者线程 t1。 thread t2(AA::outcache, aa); // 创建消费者线程 t2。 thread t3(AA::outcache, aa); // 创建消费者线程 t3。 this_thread::sleep_for(chrono::seconds(2)); // 休眠 2 秒。 aa.incache(2); // 生产 2 个数据。 this_thread::sleep_for(chrono::seconds(3)); // 休眠 3 秒。 aa.incache(5); // 生产 5 个数据。 t1.join(); // 回收子线程的资源。 t2.join(); t3.join(); } 244、原子类型 atomic C11 提供了 atomicT模板类结构体用于支持原子类型模板参数可以是 bool、char、i nt、long、long long、指针类型不支持浮点类型和自定义数据类型。 原子操作由 CPU 指令提供支持它的性能比锁和消息传递更高并且不需要程序员处理加锁和释 放锁的问题支持修改、读取、交换、比较并交换等操作。 头文件#include atomic 构造函数 atomic() noexcept default; // 默认构造函数。 atomic(T val) noexcept; // 转换函数。 atomic(const atomic) delete; // 禁用拷贝构造函数。 赋值函数 atomic operator(const atomic) delete; // 禁用赋值函数。 常用函数 void store(const T val) noexcept; // 把 val 的值存入原子变量。 T load() noexcept; // 读取原子变量的值。 T fetch_add(const T val) noexcept; // 把原子变量的值与 val 相加返回原值。 T fetch_sub(const T val) noexcept; // 把原子变量的值减 val返回原值。 T exchange(const T val) noexcept; // 把 val 的值存入原子变量返回原值。 T compare_exchange_strong(T expect,const T val) noexcept; // 比较原子变量的值和预期 值 expect如果当两个值相等把 val 存储到原子变量中函数返回 true如果当两个值不相等用原 子变量的值更新预期值函数返回 false。CAS 指令。 bool is_lock_free(); // 查询某原子类型的操作是直接用 CPU 指令返回 true还是编译器内部 的锁返回 false。 原子类型的别名 注意  atomicT模板类重载了整数操作的各种运算符。  atomicT模板类的模板参数支持指针但不表示它所指向的对象是原子类型。  原子整型可以用作计数器布尔型可以用作开关。  CAS 指令是实现无锁队列基础。 示例 #include iostream #include atomic // 原子类型的头文件。 using namespace std; int main() { atomicint a 3; // atomic(T val) noexcept; // 转换函数。 cout a a.load() endl; // 读取原子变量 a 的值。输出a3 a.store(8); // 把 8 存储到原子变量中。 cout a a.load() endl; // 读取原子变量 a 的值。 输出a8 int old; // 用于存放原值。 old a.fetch_add(5); // 把原子变量 a 的值与 5 相加返回原值。 cout old old a a.load() endl; // 输出old8a13 old a.fetch_sub(2); // 把原子变量 a 的值减 2返回原值。 cout old old a a.load() endl; // 输出old13a11 atomicint ii 3; // 原子变量 int expect 4; // 期待值 int val 5; // 打算存入原子变量的值 // 比较原子变量的值和预期值 expect // 如果当两个值相等把 val 存储到原子变量中 // 如果当两个值不相等用原子变量的值更新预期值。 // 执行存储操作时返回 true否则返回 false。 bool bret ii.compare_exchange_strong(expect, val); cout bret bret endl; cout ii ii endl; cout expect expect endl; }
http://www.dnsts.com.cn/news/25177.html

相关文章:

  • 做网站后台需要写代码吗建立的读音
  • 网站备案后东莞教育平台网站建设
  • 怎么做网站流量鞍山做网站的
  • 吧网站做软件的软件app开发需要什么资源和团队
  • 如何制作网站效果图网站改版模版
  • 如何查看网站的服务器位置微信做一元云购网站
  • 客户网站建设确认书做网站不会写代码
  • 个人网站创建平台要多少钱建设本地网站 配置iis
  • 网站logo显示wordpress文章列表摘要
  • 公司网站建设工作计划网站建设试用
  • 网站推广计划书十大免费视频素材网
  • 用cms建网站江西人才招聘网官网
  • 淘宝客网站怎么做视频wordpress买域名
  • php做电影网站推广引流渠道有哪些
  • 国内做网站大公司有哪些wordpress商城 淘宝客
  • 吴江规划建设局网站创建全国文明城市的宗旨是什么
  • 高中教做网站的软件微网站建设哪家好
  • 定制化网站开发的好处从化定制型网站建设
  • 做网站的宽度为多少钱服务器在哪里
  • 网站建设企业开发建设工程规划许可证查询网站
  • 进网站备案wordpress主题付费
  • 廊坊网站建设的公司成都网站建设 公司
  • 聊城网站开发个人福建住建设厅官方网站
  • 表白网站怎么做wordpress只显示文章标题摘要
  • 网站建设质量管理定义wordpress保存文件
  • 锤子 网站 模版网站开发工程师需要哪些技术
  • 深圳网站建设公司信息商河做网站多少钱
  • 织梦网站被黑wordpress猜你喜欢功能
  • 网站建设及推广好做吗公司内部网站模板
  • 乐山做网站东莞营销网站建设直播