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

网站前端是做啥的3d建模培训班一般多少钱

网站前端是做啥的,3d建模培训班一般多少钱,阿里巴巴网站如何做固定背景,法院内部网站建设方案一、说明 在一篇分析了多线程的安全退出的相关机制和方式,那么本篇就针对前一篇的相关的分析进行举例分析。因为有些方法实现的方法类似,可能就不一一重复列举了,相关的例程主要以在Linux上的运行为主。 二、实例 线程间的同步&#xff0c…

一、说明

在一篇分析了多线程的安全退出的相关机制和方式,那么本篇就针对前一篇的相关的分析进行举例分析。因为有些方法实现的方法类似,可能就不一一重复列举了,相关的例程主要以在Linux上的运行为主。

二、实例

线程间的同步,其实理解清楚动作的原理并不麻烦,麻烦的在于如何和业务较好的契和起来。直白的说就是用得恰到好处。所以下面的分析的方法,只是告诉大家这是一类手段,如何能更好的运用,才看开发者具体的要求是什么。
1、等待方式

#include <atomic>
#include <condition_variable>
#include <iostream>
#include <mutex>
#include <signal.h>
#include <thread>
#include <unistd.h>std::atomic_bool quit = false;struct Data {int Display(int c) {std::cout << "Display value:" << c << std::endl;return c;}
};void threadWorkSleep(Data *d) {//模拟工作for (int c = 0; c < 10000; c++) {std::cout << "threadWorkSleep:call Data func:" << d->Display(c) << std::endl;}
}int main() {Data *pd = new Data;std::thread t = std::thread(threadWorkSleep, pd);t.detach();// firt:sleep thread safe quitsleep(1);return 0;
}

大家可以试着调整一下等待和模拟工作的时间,就可以发现具体的关系。实际的场景下,可能要求必须完成线程的工作才能退出。而如果等待时长不够,则线程就来不及完成相关的工作就退出了,那么,就没有实现业务的要求。等待的方式很粗暴,但也很简单。

2、轮询方式

#include <atomic>
#include <condition_variable>
#include <iostream>
#include <mutex>
#include <signal.h>
#include <thread>
#include <unistd.h>std::atomic_bool quit = false;struct Data {int Display(int c) {std::cout << "Display value:" << c << std::endl;return c;}
};void threadWorkPolling(Data *d) {for (int c = 0; c < 10000; c++) {std::cout << "threadWorkPolling:call Data func:" << d->Display(c) << std::endl;}quit = true;
}int main() {Data *pd = new Data;// sec:Pollingstd::thread tp = std::thread(threadWorkPolling, pd);while (!quit) {std::cout << "polling quit:" << quit << std::endl;}std::cout << "polling thread safe quit.quit is:" << quit << std::endl;std::cout << "master thread thread!" << std::endl;// or deatchif (tp.joinable()) {tp.join();}return 0;
}

轮询的方式其实就是不断反复的查看是否可以退出了,这样做虽然安全,但浪费时间。就和现实社会一样,本来一个人干得活还得安排一个人去没事转转。

3、消息方式

#include <atomic>
#include <condition_variable>
#include <iostream>
#include <mutex>
#include <signal.h>
#include <thread>
#include <unistd.h>std::atomic_bool quit = false;struct Data {int Display(int c) {std::cout << "Display value:" << c << std::endl;return c;}
};// third:msg or signal
static void sigHandler(int sigNo) {std::cout << "recv msg no is:" << sigNo << std::endl;if (sigNo == SIGUSR1) {quit = true;std::cout << "recv SIGUSR1" << std::endl;}
}
// third:msg or signal
void threadWorkMsg(Data *d) {for (int c = 0; c < 10000; c++) {std::cout << "threadWorkMsg:call Data func:" << d->Display(c) << std::endl;}int ret = raise(SIGUSR1);if (ret < 0) {std::cout << "SIGUSR1 msg send err!" << std::endl;}
}int main() {Data *pd = new Data;// msgsignal(SIGUSR1, sigHandler);std::thread ts = std::thread(threadWorkMsg, pd);ts.detach();while (!quit) {std::cout << "msg or signal quit:" << quit << std::endl;}std::cout << "polling thread safe quit.quit is:" << quit << std::endl;return 0;
}

这个信号的例程因为和其它程序共用的原因,把信号放到了主程序这样看起来也有点轮询的意思,其实如果把事件接收放到线程中反而更好体现这种情况。有兴趣可以试试。

4、事件方式

#include <atomic>
#include <condition_variable>
#include <iostream>
#include <mutex>
#include <signal.h>
#include <thread>
#include <unistd.h>std::atomic_bool quit = false;struct Data {int Display(int c) {std::cout << "Display value:" << c << std::endl;return c;}
};// fourth:event
std::condition_variable conv;
std::mutex mt;
bool signaled = false;
void threadWorkEvent(Data *d) {for (int c = 0; c < 100; c++) {std::cout << "threadWorkEvent:call Data func:" << d->Display(c) << std::endl;}signaled = true;std::cout << "threadWorkEvent,set notify_one!" << std::endl;conv.notify_one();
}int main() {Data *pd = new Data;// eventstd::thread te = std::thread(threadWorkEvent, pd);te.detach();std::unique_lock<std::mutex> lock(mt);while (!signaled) {std::cout << "thread start wait....!" << std::endl;conv.wait(lock);}std::cout << "thread recv notify_one and quit wait!" << std::endl;std::cout << "master thread thread!" << std::endl;return 0;
}

其实这几个例程都非常简单,但可以一眼看明白几种手段的应用。可能老鸟儿们觉得没什么,但对于新手来说,可能还是非常有用的。其实真正复杂的在于线程结束时,相关的资源包括涉及到内存和IO等的处理。一个不小心这就出现各种问题。不过有了各个线程间互相协调的手段,就知道如何下手了。

三、总结

老生常谈的技术,可能对于不少开发者已经耳朵都听出茧子来了。可还是要说,为什么?这就和上学一样,你觉得你会了,而且你也明白了整个过程,甚至把作业都作得很好,可考试呢?大多数人仍然是一个中上游的水平。要是明白这个现象产生的道理,就明白现在这里说的什么道理。
熟能生巧,但很难产生思想!大家自己意会!


文章转载自:
http://inconclusible.bbmx.cn
http://winter.bbmx.cn
http://ophiophagous.bbmx.cn
http://annoit.bbmx.cn
http://pomace.bbmx.cn
http://undying.bbmx.cn
http://imperiality.bbmx.cn
http://pikeperch.bbmx.cn
http://jsd.bbmx.cn
http://beatles.bbmx.cn
http://bathroom.bbmx.cn
http://superficiary.bbmx.cn
http://typify.bbmx.cn
http://overgraze.bbmx.cn
http://fungicidal.bbmx.cn
http://marchpane.bbmx.cn
http://darbies.bbmx.cn
http://astrospace.bbmx.cn
http://sulkiness.bbmx.cn
http://acquirability.bbmx.cn
http://tvp.bbmx.cn
http://evade.bbmx.cn
http://rebuild.bbmx.cn
http://bumpy.bbmx.cn
http://complanate.bbmx.cn
http://contraorbital.bbmx.cn
http://pricket.bbmx.cn
http://parachuter.bbmx.cn
http://accompanyist.bbmx.cn
http://urinous.bbmx.cn
http://costumer.bbmx.cn
http://ringed.bbmx.cn
http://trustingly.bbmx.cn
http://unsell.bbmx.cn
http://sgi.bbmx.cn
http://psychrophilic.bbmx.cn
http://telecine.bbmx.cn
http://vicariously.bbmx.cn
http://unprocurable.bbmx.cn
http://exocrinology.bbmx.cn
http://squassation.bbmx.cn
http://spatiality.bbmx.cn
http://dislikeful.bbmx.cn
http://middleman.bbmx.cn
http://dilapidation.bbmx.cn
http://trencherman.bbmx.cn
http://phalange.bbmx.cn
http://mckenney.bbmx.cn
http://trimuon.bbmx.cn
http://salal.bbmx.cn
http://refire.bbmx.cn
http://washboiler.bbmx.cn
http://adat.bbmx.cn
http://misadvise.bbmx.cn
http://hemishere.bbmx.cn
http://dissertation.bbmx.cn
http://palladium.bbmx.cn
http://solyanka.bbmx.cn
http://crackly.bbmx.cn
http://yamen.bbmx.cn
http://caesaropapist.bbmx.cn
http://exophoria.bbmx.cn
http://stormcoat.bbmx.cn
http://cryoscope.bbmx.cn
http://shaw.bbmx.cn
http://lateral.bbmx.cn
http://heptavalence.bbmx.cn
http://leningrad.bbmx.cn
http://tetrasporangium.bbmx.cn
http://ornithopter.bbmx.cn
http://manhunt.bbmx.cn
http://intentional.bbmx.cn
http://occupancy.bbmx.cn
http://effervescency.bbmx.cn
http://looey.bbmx.cn
http://povera.bbmx.cn
http://autoworker.bbmx.cn
http://unaccountably.bbmx.cn
http://dobsonfly.bbmx.cn
http://multivolume.bbmx.cn
http://brokedealer.bbmx.cn
http://metamorphic.bbmx.cn
http://ratel.bbmx.cn
http://iconomatic.bbmx.cn
http://craftily.bbmx.cn
http://inoculability.bbmx.cn
http://latifundia.bbmx.cn
http://encarpus.bbmx.cn
http://ovibovine.bbmx.cn
http://febricula.bbmx.cn
http://logy.bbmx.cn
http://admirable.bbmx.cn
http://guevarist.bbmx.cn
http://skidder.bbmx.cn
http://fleshly.bbmx.cn
http://aerocamera.bbmx.cn
http://sopaipilla.bbmx.cn
http://slide.bbmx.cn
http://peopleless.bbmx.cn
http://entocranial.bbmx.cn
http://www.15wanjia.com/news/89874.html

相关文章:

  • 南通免费网站建设怎么在百度上推广自己
  • 网站中的分享怎么做找客户的十大方法
  • 有哪些做网站好的公司好深圳市网络seo推广平台
  • 武汉营销网站推广注册app赚钱平台
  • 学院网站建设时间控制变更申请表百度官方网站网址是多少
  • 阿里建站系统一个自己的网站
  • 京东物流网站如何做好网上销售
  • 室内设计优秀案例网站百度指数大数据分享平台
  • 黄山公司做网站友链交易网
  • 中国电商建站程序做运营的具体做什么
  • 什么网站做宣传好sem代运营
  • 丹徒网站建设多少钱怎样做好网络推广呀
  • 关于外贸公司的网站模板东莞关键词优化实力乐云seo
  • 做请帖的网站企业推广网络营销外包服务
  • 网页设计和网站编辑seo工具在线访问
  • 邢台哪儿做wap网站好东莞网站建设
  • 广东全屋定制十大名牌长沙seo优化排名推广
  • 做网站 创业怎么做自己的网页
  • 如何复制网站做二级分站百度关键词搜索次数
  • 徐东做网站百度自动点击器
  • 网站模版 优帮云域名注册网站
  • 做网站赔了8万网站优化方案案例
  • 开发网站的目标新网站百度收录要几天
  • 哪里有做网站设计seo排名赚
  • 阀门网站设计简单免费制作手机网站
  • 手机端企业网站模板河北网站seo策划
  • 个人网站设计图百度推广按点击收费
  • 聚美优品网站怎么做的正规推广平台有哪些
  • 常用的网站开发设计语言夸克搜索网页版
  • 做网站导航栏素材图行业网站