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

电商网站的制作流程女生学建筑选择什么专业

电商网站的制作流程,女生学建筑选择什么专业,河南网站seo,程序员自己做网站怎么能来钱c 20中引入了latch和barrier,提供了一种简单的同步机制,来协调多个线程 线程屏障提供了一个计数器,每个参与任务的线程完成自己的任务后,计数器减1.而需要同步的线程,屏障计数器可以阻塞,等待计数器为0时&a…

 c++ 20中引入了latch和barrier,提供了一种简单的同步机制,来协调多个线程

线程屏障提供了一个计数器,每个参与任务的线程完成自己的任务后,计数器减1.而需要同步的线程,屏障计数器可以阻塞,等待计数器为0时,继续执行后面的代码。

latch为一次性计数,当计数为0时就不能重复使用了。而barrirer为多个阶段的计数。

下面模拟一个比赛:发令枪响起,选手开跑,全部选手到达终点后统计成绩。

#include<array>
#include<vector>
#include<thread>
#include<iostream>
#include<mutex>
#include<algorithm>
#include<sstream>
#include<iomanip>
#include<semaphore>
#include<random>
#include<syncstream>
#include<latch>
using namespace std;
struct Runner
{string name;int time{ 0 };void run(latch& start, latch& end){//等待发令枪响start.wait();auto start_time = chrono::system_clock::now();mt19937 eng{ random_device{}() };uniform_int_distribution<unsigned int>uniform_int_distribution{ 0,2000 };this_thread::sleep_for(chrono::microseconds(9600000 + uniform_int_distribution(eng)));auto end_time = chrono::system_clock::now();time = chrono::duration_cast<chrono::milliseconds>(end_time - start_time).count();//跑完了end.count_down(1);//计数器减1}bool operator<(const Runner& other)const { return time < other.time; }
};int main()
{vector<Runner> runners = { Runner{"张三"},Runner{"李四"},Runner{"王五"},Runner{"赵六"},Runner{"钱七"}};const int runner_counter = runners.size();latch start(1);latch finish(runner_counter);vector<thread>threads;for (int i = 0; i < runner_counter; i++){threads.emplace_back(&Runner::run,&runners[i],ref(start),ref(finish));}cout << "发令枪响起" << endl;start.count_down();//阻塞等待计数器减为0//等待所有选手跑完finish.wait();//阻塞等待计数器减为0cout << "比赛结果:\n=============================\n";sort(runners.begin(), runners.end());for (auto& runner : runners){cout << runner.name << ":" << float(runner.time) / 1000 << "秒" << endl;}for (auto& t : threads){t.join();}return 0;
}

打印结果

 下面来看下barrier,与latch不同时,当barrier计数器为0时,开始新的一轮计时。

barrier是一个类模版,模版参数是一个可调用对象,每次计数器为0时会调用该函数。构造函数传递一个初始计数值。arrive将计数器减去传入的n.wait等待本阶段计数器到达为0. arrive_and_wait是arrive和wait一起使用,arrive_and_drop除了将本阶段计数减去n,还将下一阶段 初始计数值减去n. 

下面模拟一个幸存者游戏,每轮淘汰不符合条件的玩家,一共进行五轮游戏。

#include<array>
#include<vector>
#include<thread>
#include<iostream>
#include<mutex>
#include<algorithm>
#include<sstream>
#include<iomanip>
#include<semaphore>
#include<syncstream>
#include<numeric>
#include<future>
#include<random>
#include<barrier>
using namespace std;
class Participant
{
public:string name;Participant(string name) :name(name) {}template<typename BarrierType>void run(BarrierType& finish){mt19937 eng(random_device{}());uniform_int_distribution<unsigned int>uniform_dist(1000, 2000);for (int i = 0; i < 5; i++){auto rnd = uniform_dist(eng);this_thread::sleep_for(chrono::milliseconds(rnd));alive = rnd % 3;if (alive){finish.arrive_and_wait();//阻塞等待计数器 减到0}else{finish.arrive_and_drop();//当前减1并将下一轮减1break;}}}bool is_alive()const{return alive;}
private:bool alive = true;
};
int main()
{vector<Participant>participant = { Participant{"张三"},Participant{"李四"},Participant{"王五"},Participant{"赵六"},Participant{"钱七"}};const int participant_count = participant.size();int round = 0;auto on_complete = [&participant, &round]() noexcept {round++;cout << "第" << round << "轮幸存者:" << endl;int count = 0;for (auto& p : participant){if (p.is_alive()){cout << p.name << " ";count++;}}cout << endl;if (count == 0)cout << "无" << endl;};barrier finish(participant_count,on_complete);//计数器减为0时回调on_complete函数vector<thread>threads;for (auto& p : participant){threads.emplace_back([&p, &finish]() {p.run(finish);});}for (auto& thread : threads)thread.join();return 0;
}


文章转载自:

http://assOoe81.bbyqz.cn
http://Pqu4XzVX.bbyqz.cn
http://pQK30Vy3.bbyqz.cn
http://9MrF0BVl.bbyqz.cn
http://8KxMaaB4.bbyqz.cn
http://RuQ7skQn.bbyqz.cn
http://0oDqG6fi.bbyqz.cn
http://zd6DctJX.bbyqz.cn
http://wqAnQzzU.bbyqz.cn
http://PcqcnBRG.bbyqz.cn
http://z5M3epx9.bbyqz.cn
http://Gzlc0fou.bbyqz.cn
http://DIGbFJ6j.bbyqz.cn
http://pKz0DLyT.bbyqz.cn
http://7NsyIig6.bbyqz.cn
http://s142Cyh1.bbyqz.cn
http://uCE9xWIH.bbyqz.cn
http://3k2qRDtI.bbyqz.cn
http://9UYnihFW.bbyqz.cn
http://IguFdVKq.bbyqz.cn
http://mbBDQ9GW.bbyqz.cn
http://Y0N1ILDo.bbyqz.cn
http://DcgZeYYI.bbyqz.cn
http://nKhBj2nb.bbyqz.cn
http://BCbXD3p9.bbyqz.cn
http://0k9CmdVK.bbyqz.cn
http://OP6UPdpu.bbyqz.cn
http://GZrFeGth.bbyqz.cn
http://lefWJ7PX.bbyqz.cn
http://OtAFIXbI.bbyqz.cn
http://www.dtcms.com/wzjs/731177.html

相关文章:

  • 怎么生成域名做网站wordpress英文单词不显示完整
  • 高新手机网站建设公司wordpress手机ui
  • 网站蓝色和红色搭配专业的网上购物平台
  • 社交网站建设公司南京做网站群的公司
  • 包头市住房和城乡建设局官方网站南宁 网站建设 公司
  • 邯郸做网站哪里好wordpress网站发布文章
  • 广州网站开发定制方案html网站制作教程
  • wordpress谷歌地图秦洁婷seo博客
  • 安阳建设网站做ptt网站
  • 网站服务器分流怎么做利用表格布局做网站步骤
  • 自己做免费网站的视频柯桥区建设集团网站
  • 做网站九州科技淘宝客网站返利程序
  • 个人网站做电商建筑工程网络进度计划备注填写范例
  • 建设网站怎么建设分类天津自助建站软件
  • 网站设计参考恶意镜像网站程序
  • 做网站要学些什么软件大连做app的公司
  • 网站建设要多久豆瓣网站建设立项ppt
  • 温州制作网站网站seo优化网站
  • ipad做网站服务器做书架的网站
  • 做网站 哪些公司安徽省在建项目查询
  • 网站注册系统网站开发目的与意义
  • 自己在公司上班做网站宣传 侵权吗2018网站建设涉及
  • 网站备案流程2016网站的要素是什么
  • 合肥网站制作推广深圳seo优化培训
  • 安徽建设工程网站网站更换关键词怎么做好
  • 创建网站的软件成立公司代理
  • 青岛市建设网站化妆品企业网站建设的缺点
  • 支付宝 收费 网站开发专业网站开发企业
  • 织梦网站怎么做seo学美工培训费大概多少
  • 设计师的网站有哪些温岭企业网站建设公司