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

口碑好的高密网站建设如何做优化网站排名

口碑好的高密网站建设,如何做优化网站排名,中国网站设计模板下载,易语言如何做浏网站介绍 提交任务函数submitTask中返回的Result类型应该是用Result类包装当前的task#xff0c;因为出函数之后task即如下形式#xff1a;return Result(task); Result和Task都要互相持有对方的指针#xff0c;Task要将任务执行结果通过Result::setVal(run()) 调用传给其对应…介绍 提交任务函数submitTask中返回的Result类型应该是用Result类包装当前的task因为出函数之后task即如下形式return Result(task); Result和Task都要互相持有对方的指针Task要将任务执行结果通过Result::setVal(run()) 调用传给其对应Result对象。 Result类的声明和实现如下 // threadpool.h // 提交到线程池的task任务执行完成后的返回值类型 class Result { public:Result(std::shared_ptrTask task, bool isValid true);~Result() default;//获取任务执行后的返回值void setVal(Any any);// get方法用户调用这个方法获取task的返回值Any get(); private:Any any_; // 存储任务的返回值Semaphore sem_; // 线程通信std::shared_ptrTask task_; // 指向对应获取返回值的任务对象std::atomic_bool isValid_; // 检查返回值是否有效 };// threadpool.cpp Result::Result(std::shared_ptrTask task, bool isValid): isValid_(isValid), task_(task) {task-setResult(this); }//获取任务执行后的返回值 void Result::setVal(Any any) {// 存储task的返回值this-any_ std::move(any); // Any 类只提供右值拷贝和移动赋值函数sem_.post(); // 获取任务的返回值增加信号量资源 }// get方法用户调用这个方法获取task的返回值 Any Result::get() {if (!isValid_){return ;}sem_.wait(); // task任务如果没执行完这里会阻塞用户线程return std::move(any_); // Any不提供左值拷贝构造和拷贝赋值 }Task类的声明和实现如下 // threadpool.h class Task { public:Task();~Task() default;void exec();void setResult(Result* res);// 用户可自定义任务类型从Task派生出来重写run方法实现自定义任务处理virtual Any run() 0;private:// 不要用智能指针可能会导致和Result产生循环引用的问题Result* result_; // Result对象生命周期 Task对象生命周期 }; // threadpool.cpp Task::Task(): result_(nullptr) {} void Task::exec() {if (nullptr ! result_){result_-setVal(run()); // !!!}}void Task::setResult(Result* res) {result_ res; }Master-Slave线程模型 Master线程用来分解任务然后给各个Slave分配任务 等待各个Slave线程执行完任务返回结果 Master线程合并各个任务结果并输出 测试 使用3个线程来计算12…300000000 的和1加到3亿 测试代码如下 #include iostream #include chrono #include threadpool.husing uLong unsigned long long;class MyTask : public Task { public:MyTask(uLong /*int*/ begin, uLong /*int*/ end): begin_(begin), end_(end){}Any run(){std::cout tid: std::this_thread::get_id() begin! std::endl;//std::this_thread::sleep_for(std::chrono::seconds(5));uLong sum 0;for (uLong i begin_; i end_; i){sum i;}std::cout tid: std::this_thread::get_id() end! std::endl;return sum;} private:uLong /*int*/ begin_;uLong /*int*/ end_; }; int main() {ThreadPool pool;pool.start(4);Result res1 pool.submitTask(std::make_sharedMyTask(1, 1000000000));Result res2 pool.submitTask(std::make_sharedMyTask(1000000001, 2000000000));Result res3 pool.submitTask(std::make_sharedMyTask(2000000001, 3000000000));uLong sum1 res1.get().cast_uLong();uLong sum2 res2.get().cast_uLong();uLong sum3 res3.get().cast_uLong();// Master - Slave线程模型std::cout (sum1 sum2 sum3) std::endl;getchar();return 0; } 出现的问题 测试时最后一个获取任务的线程没有执行完成 而且似乎出现了死锁的现象按任意键无反应 分析 根据卡住的位置我简单的推测是第三个任务执行的问题于是在提交第三个子任务处打上断点 到达断点后进入MyTask构造函数在初始化列表发现end_成员被初始化为负数如下图 这是由于int类型的最大值在编译器中定义如下 #define INT_MAX 2147483647小于3000000000导致了溢出从而转变成负数。 这样导致在如下的任务执行函数的循环中程序永远无法出循环 解决办法 将MyTask类中的成员类型改变为unsigned long long class MyTask : public Task { public:MyTask(uLong /*int*/ begin, uLong /*int*/ end): begin_(begin), end_(end){}Any run(){std::cout tid: std::this_thread::get_id() begin! std::endl;//std::this_thread::sleep_for(std::chrono::seconds(5));uLong sum 0;for (uLong i begin_; i end_; i){sum i;}std::cout tid: std::this_thread::get_id() end! std::endl;return sum;} private:uLong /*int*/ begin_;uLong /*int*/ end_; };程序运行后结果正确
http://www.hkea.cn/news/14448120/

相关文章:

  • 网站开发和建设信息网站开发网络公司
  • 网站的页面布局是什么加盟教育培训机构
  • 网站后台需求郑州seo网站推广
  • 宜昌本地网站哈默wordpress上传
  • seo网站优化经理左侧 导航 网站
  • 一流的网站建设推广盐城网页设计方案
  • 建设自己公司的网站如何做网站软件
  • 秦皇岛网站制作小程序开发在线排版设计
  • 辽宁沈阳做网站WordPress模板推荐国外
  • 公司网站cmswindows不能用wordpress
  • 视频解析网站如何做搜索爱装网
  • 如何搭建o2o网站产品分类 网站模板
  • 手机微信网站开发wordpress题目
  • 网站二次开发公司wordpress #
  • 网上花店网站建设规划书新余 网站建设
  • 丽水建设部门网站Wordpress文章和tag标签
  • wordpress主题破解网站网站设计模板中的页
  • 扬中零壹网站建设盐城城乡建设局网站
  • 购物网站制作实例中小企业网站建设多少钱
  • 泉州制作网站开发设计海报的软件
  • 郑州做网站汉狮河北手机网站制作哪家好
  • 重庆美邦 网站建设合肥网站设计机构
  • 淘宝上开做网站的店铺什么叫搭建平台
  • 深圳网站建设antnw以就业为导向的高职计算机专业网站设计
  • win7在局域网做网站支付宝wordpress api接口
  • wordpress 安全防范优化 网站访问速度
  • 手机微信一体网站建设wordpress增加文章404
  • 做cpc不做网站可以吗网站后台浏览器
  • 网站开发量计算山东莱州市建设局网站
  • 建网站大约得用多少钱简单的网站首页