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

中国建设银行官方网站企业html教程w3school

中国建设银行官方网站企业,html教程w3school,单页设计模板,公司主页怎么写1)promise(保证)和future的联合使用#xff0c;实现两个线程的数据传递 #include iostream #includethread #includefutureusing namespace std;//promise用法#xff1a;可以给线程一个值#xff0c;而从另一个线程读出该值 // 实现了两个线程的数…1)promise(保证)和future的联合使用实现两个线程的数据传递 #include iostream #includethread #includefutureusing namespace std;//promise用法可以给线程一个值而从另一个线程读出该值 // 实现了两个线程的数据传递 void myPromise(std::promiseint tmp,int num)//promise线程 {//在这里假使处理复杂的计算最后得出一个值并返回num num 20;tmp.set_value(num); }//另一个线程可以得到promise计算后得到的值 void myFuture(std::futureint tmp) {coutmyFuture thread receive value is : tmp.get()endl; }int main() {std::promiseint pro;std::thread th1(myPromise,std::ref(pro),10); //创建promise线程时第二个参数一定要用引用th1.join();std::futureint result pro.get_future();std::thread th2(myFuture,std::ref(result)); //std::ref( pro.get_future())用临时对象不可以th2.join();return 0; } //输出结果myFuture thread receive value is : 30 2) package_task的使用把任务从新包装起来案例代码如下 #include iostream #includethread #includefutureusing namespace std;int func(void) {coutstart----- thread_id is : std::this_thread::get_id()endl;std::this_thread::sleep_for(std::chrono::milliseconds(2000));coutend-------- thread_id is : std::this_thread::get_id()endl;return 5; }//package_task类模板,可以包装任何可调用对象 int main() {std::packaged_taskint() task(func);std::thread th(std::ref(task)); //package_task里面有一个成员函数get_future(),可以返回一个future对象th.join();std::futureint result task.get_future();coutresult.get()endl;return 0; }//std::async和std::future一起配合使用 #include iostream #includethread #includemutex #includelist #includefuture// std::async和std::future的用法 // async是一个函数模板启动一个线程;std::future是类模板当async启动任务后会返回std::future对象 // std::future对象里面有需要的返回值 using namespace std;int func(void) {coutstart----- thread_id is : std::this_thread::get_id()endl;std::this_thread::sleep_for(std::chrono::milliseconds(2000));coutend-------- thread_id is : std::this_thread::get_id()endl;return 5; }//std::launch::deferred参数时等待wait或者get返回,如果没有这两个函数直接运行接下来代码 //std::launch::deferred参数不会创建新线程 //std::future两个成员函数get是等待线程处理完返回结果wait是等待线程处理完不返回结果 int main() {coutmain thread start----- thread_id is : std::this_thread::get_id()endl;std::futureint result std::async(func); //程序不会卡到这里这里存在一个绑定关系cout********main run*********endl;coutresult.get()endl; //程序会卡到这里等待线程返回结果利用的是std::future的成员函数getreturn 0; }//条件变量与互斥量的配合使用方法 #include iostream #includethread #includemutex #includelist #includecondition_variable //条件变量是和互斥量配合使用using namespace std;class A{ public:void inQueue(void){for(int i 0; i10000;i){coutinsert message : iendl;{std::unique_lockstd::mutex uniqueLock(mtx); message.push_back(i);cond.notify_one();}}}void outQueue(void){for(int i 0 ; i10000; i){std::unique_lockstd::mutex uniqueLock(mtx); //自动加锁//wait跟互斥量的关系wait阻塞解锁wait唤醒加锁cond.wait(uniqueLock,[this](){ //如果参数2是false,解锁等待;如果是true,加锁完成后继续执行下面代码if(!message.empty()) return true;elsereturn false; //可以处理虚假唤醒,就是说容器没有数据但被唤醒了执行解锁等待。}); int cmd message.front();message.pop_front(); coutout cmd---------- is :cmdendl; }//出作用域uniqueLock锁释放;} private:std::listint message;std::condition_variable cond;std::mutex mtx;};int main() {A a;std::thread th1(A::inQueue,a);std::thread th2(A::outQueue,a);th1.join();th2.join();return 0; }5)互斥量的使用方法 #include iostream #includethread #includemutex #includelist #includecondition_variableusing namespace std;class A{ public:void inQueue(void){for(int i 0; i10000;i){coutinsert message : iendl;{std::unique_lockstd::mutex uniqueLock(mtx); message.push_back(i);}std::this_thread::sleep_for(std::chrono::milliseconds(1));}}void outQueue(void){for(int i 0; i10000;i){if(!message.empty()){int cmd 0;{std::unique_lockstd::mutex uniqueLock(mtx); cmd message.front();message.pop_front();}coutout cmd is :cmdendl;}else{coutempty---------------i: iendl;}std::this_thread::sleep_for(std::chrono::milliseconds(1));}} private:std::listint message;std::mutex mtx;};int main() {A a;std::thread th1(A::inQueue,a);std::thread th2(A::outQueue,a);th1.join();th2.join();return 0; }单例模式在线程中的使用 #include iostream #includethread #includemutexusing namespace std;std::mutex mtxRes; //单例目的即使多个线程被创建也要保证只创建一个对象所以创建多线程创建对象时要做互斥量条件判断 class A { private:A(){coutA conctructor---endl;} private:static A* m_instance; //声明一个静态私有类指针变量 public:static A* getInstance(){if(m_instance nullptr) //多个线程为了提升速度(双重锁定){std::unique_lockstd::mutex uniquelock(mtxRes);if(m_instance nullptr){m_instance new A();static garb cl;//为了程序退出后能够正常删除m_instance}}return m_instance;}void test(void){couttest------endl;}class garb //为了能正常delete m_instance而设计的内部类{public:~garb(){if(A::m_instance ! nullptr){delete A::m_instance;A::m_instance nullptr;}}}; };A* A::m_instance nullptr;void func(void) {cout-----开始单例模式创建--------endl;A::getInstance()-test();cout-----单例模式创建完成--------endl; }int main() {// A::getInstance()-test();std::thread th1(func);std::thread th2(func); th1.join();th2.join();return 0; }
http://www.hkea.cn/news/14287110/

相关文章:

  • 网站粘性什么网站后台程序好用
  • 有哪些炫酷的官方网站网页微信版文件传输
  • 招商加盟网站模板html国内做的好的电商网站有哪些方面
  • 后缀为net的网站有哪些做网站涉及个人隐私
  • 在线手机网站建设wordpress post 插件
  • 怎么查有做网站的公司有哪些网站建设图片
  • 中国电力建设企业协会网站微信运营
  • 网站开发 例子建设网站要钱吗
  • 机械网站建设中心请问聊城做网站
  • 营销机构代码怎么填排名seo软件
  • 电子商务网站建设参考文献2018网站建设中模板代码
  • 品牌网站建设帮你大蝌蚪wordpress图片资源主题
  • 网站你懂我意思正能量晚上在线观看不用下载免费魅族做淘宝客的网站怎么备案
  • 沧州做网站费用泉州网络公司都
  • dz比wordpress速度快惠州网站seo收费
  • 网站设计素材免费下载网站建设定制设计
  • 柳州做网站的企业alexa的网站排名主要分为哪两种
  • 莆田外贸自建网站交互设计是什么意思
  • 丽江网站建设南昌网站开发模板
  • 网站的术语产品推广广告
  • 最优的网站建设wordpress 安全选项
  • 在线开发网站建设江西门户网站建设
  • 英文免费网站模板吕梁营销型网站建设费用
  • 网站与网站自动跳转代码西青网站建设
  • 网站地图深度做多少合适如何组做网站
  • 如何架设个人网站wordpress joomla
  • 全美网站建设企业文化馆展厅设计
  • tp框架做餐饮网站东莞建设监督网站
  • 网站底部版权信息西宁建一个网站公司
  • 可以更改上传到网站的文件内容吗wordpress大学主