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

wordpress模板编辑首页网站seo推广seo教程

wordpress模板编辑首页,网站seo推广seo教程,网页制作与网站建设试题,新项目如何推广来源:多线程学习 目录 condition_variable与其使用场景 生产者与消费者模型 C11实现跨平台线程池 condition_variable与其使用场景 生产者与消费者模型 生产者-消费者模式是一种经典的多线程设计模式,用于解决多个线程之间的数据共享和协作问题。…

来源:多线程学习

目录

condition_variable与其使用场景 

生产者与消费者模型

C++11实现跨平台线程池 


condition_variable与其使用场景 

生产者与消费者模型

生产者-消费者模式是一种经典的多线程设计模式,用于解决多个线程之间的数据共享和协作问题。在生产者-消费者模式中,有两类线程:生产者线程和消费者线程。它们之间通过共享一个缓冲区(或队列)来协作,生产者将数据放入缓冲区,消费者从缓冲区取出数据并进行处理。

生产者-消费者模式的主要目标是实现生产者和消费者之间的解耦,使它们可以独立地进行工作,从而提高系统的性能和可维护性。

condition_variable的步骤如下:

  1. 创建一个condition_variable对象
  2. 创建一个互斥锁 mutex 对象,用来保护共享资源的访问。
  3. 在需要等待条件变量的地方:使用unique_lock<mutex>对象锁定互斥锁,并调用condition_variable::wait()、condition_variable::wait_for()或condition_variable::wait_until()函数等待条件变量。

  4. 在其他线程中需要通知等待的线程时,调用condition_variable::notify_one()或condition_variable::notify_all()函数通知等待的线程。

代码参考:

#include <iostream>
#include <thread>
#include <mutex>
#include <string>#include <condition_variable>
#include <queue>
using namespace std;queue<int> g_queue; //任务队列
condition_variable g_cv;
mutex mtx;//实现生产者
void Producer() {for (int i = 0; i < 10; ++i) {{unique_lock<mutex> lock(mtx);g_queue.push(i);//加任务的时候哦,需要通知消费者来取任务g_cv.notify_one(); cout << "Producer: " << i << endl;}this_thread::sleep_for(chrono::microseconds(100)); //休眠100ms}
}//实现消费者
void Consumer() {while (1) {unique_lock<mutex> lock(mtx);//如果队列为空,理应需要等待//第二个参数是函数指针(可以用lambda表达式)返回的true则不堵塞,false则阻塞,注意阻塞的时候会释放资源所以不会发生死锁g_cv.wait(lock, []() {return !g_queue.empty(); });int value = g_queue.front();g_queue.pop();cout << "Consumer:" << value << endl;}
}int main() {thread t1(Producer);thread t2(Consumer);t1.join();t2.join();return 0;
}

C++11实现跨平台线程池 

线程池符合的就是生产者和消费者模型。线程池提前维护一个线程的数组和一个任务队列,不同的让线程去完成队列里的任务。

使用线程池可以解决不断销毁创建线程的消耗。

代码参考:

//实现线程池
#include <iostream>
#include <thread>
#include <mutex>
#include <string>
#include <condition_variable> //条件变量
#include <queue>
#include <thread>
#include<functional> //对象包装器
using namespace std;//创先线程池的类
class ThreadPool {
public://构造函数ThreadPool(int numThreads) : stop(false) {for (int i = 0; i < numThreads; i++) {threads.emplace_back([this] {while (1) {unique_lock<mutex> lock(mtx); //互斥锁,因为线程是操作任务队列的condition.wait(lock, [this] { //判断任务队列里面是否有任务,且是否停止return !tasks.empty() || stop;});if (stop && tasks.empty()) { //如果线程终止了,则结束线程return;}function<void()> task(move(tasks.front())); //拷贝构造,但是使用move能够防止赋值tasks.pop();lock.unlock(); //取完任务之后,解锁,让其他线程可以接续取任务task();}});}}//析构函数~ThreadPool() {//手动加{}提供作用域{unique_lock<mutex> lock(mtx);stop = true;}condition.notify_all(); //通知线程完成所有任务for (thread& t : threads) { //这个地方要使用引用,因为线程是不可以复制的t.join();}}//加任务,加函数,使用模版可以实现可变参数template<class F,class... Args>void enqueue(F&& f, Args&&...args) { //&&万能引用function<void()> task = bind(forward<F>(f), forward<Args>(args)...);{unique_lock <mutex> lock(mtx);tasks.emplace(move(task));}condition.notify_one();}private:vector<thread> threads; //线程数组queue<function<void()>> tasks; //任务队列,队列里面包含的是函数模版mutex mtx; //互斥量condition_variable condition; //条件变量bool stop;};int main() {ThreadPool pool(4);for (int i = 0; i < 10; i++) {pool.enqueue([i] {cout << "task: " << i << " start" << endl;this_thread::sleep_for(chrono::seconds(1));cout << "task: " << i << " down" << endl;});}return 0;
}

知识点汇总:

1. thread线程库:vector<thread> threads; //线程数组

2.function函数模版:

3.mutex互斥锁

4.condtion_variable 条件变量:解决生产者消费者问题

5.lambda表达式-匿名函数

6.move移动语义

7.template<class F, class...Args>

8.&&右值引用,万能引用

9.bind函数适配器,绑定函数和函数参数

10.forward完美转发,配合&&实现万能引用

http://www.wangmingla.cn/news/8149.html

相关文章:

  • 营销型网站建设策划seo网络营销外包公司
  • 深圳app设计网站建设东莞海外网络推广
  • 瑞安市住房和城乡规划建设局网站中国网站建设公司前十名
  • 网站建设的内容管理百度手机下载安装
  • wordpress 摘要 格式seo行业岗位有哪些
  • 网站加入视频网站建设报价方案
  • 58同城网站模板百度经验首页官网
  • 网站建设规划书 百度文库网站建设公司企业网站
  • wordpress子主题怎么用seo官网优化
  • 宁波网站建设制作哪家好营销活动方案模板
  • 如何自建外贸b2c购物网站谈谈你对seo概念的理解
  • 网站制作怎么做框架关键词seo优化
  • 长沙 网站设计 公司价格北京网站制作建设公司
  • 免费网站建设价格百度推广登录平台网址
  • 闵行网站建设游戏优化软件
  • 做网站要注册商标第几类seo是什么意思中文
  • 做调查问卷哪个网站好深圳博惠seo
  • 婚庆公司网站建设总结报告北京已感染上千万人
  • 怎么在programmableweb 网站做api分析图表b2c有哪些电商平台
  • 西宁百度推广公司电话百度起诉seo公司
  • 漳州网站建设哪家最权威中国网站访问量排行
  • 哪里有做胎儿dna亲子鉴定全网营销与seo
  • 为了做宣传网站而注册公司互联网营销策划案
  • 网站文档怎么加图片不显示现在什么app引流效果好
  • 电商网站首页图片切换怎么做的seo霸屏软件
  • 天津自动网站建设调试舆情监测系统
  • 用什么技术可以做web网站西安seo优化
  • 商城网站开发模板惠州网络营销
  • 网站导航栏原型图怎么做seo是什么意思seo是什么职位
  • 滨州做网站的电话网站设计服务企业