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

无锡公共工程建设中心网站seo排名软件怎么做

无锡公共工程建设中心网站,seo排名软件怎么做,高安做网站,虚拟主机销售网站模板1. thread对象的析构问题 在 C 多线程标准库中,创建 thread 对象后,必须在对象析构前决定是 detach 还是 join。若在 thread 对象销毁时仍未做出决策,程序将会终止。 然而,在创建 thread 对象后、调用 join 前的代码中&#xff…

1. thread对象的析构问题

在 C++ 多线程标准库中,创建 thread 对象后,必须在对象析构前决定是 detach 还是 join。若在 thread 对象销毁时仍未做出决策,程序将会终止。

然而,在创建 thread 对象后、调用 join 前的代码中,若程序抛出异常,就会跳过 join 的调用,进而导致程序终止。

因此,必须在异常捕获中也调用 join。

这无疑增加了编程的复杂性,因为每个相关位置都需要在正常流程中写一次 join,在异常捕获中再写一次。

下面的代码将演示这一情况:

#include <iostream>
#include <thread>using namespace std;void threadFunc()
{cout << "Hello from thread" << endl;
}int main()
{thread t(threadFunc);try{throw runtime_error("Something went wrong");}catch (...){t.join();throw;}t.join();
}

2. 一种简单的解决办法——RAII

一种简单的解决办法就是使用RAII思想,编写一个类来绑定一个thread对象,在类的析构函数中调用thread对象的join方法。

下面的代码展示了这一点:

#include <iostream>
#include <thread>using namespace std;class thread_guard
{
public:thread_guard(std::thread& t) : t_(t) {}~thread_guard(){if (t_.joinable()){t_.join();}}thread_guard(const thread_guard&) = delete;thread_guard& operator=(const thread_guard&) = delete;
private:thread& t_;
};void threadFunc()
{cout << "Thread function running..." << endl;
}int main()
{thread t(threadFunc);thread_guard g(t);return 0;
}

局部对象会自动被销毁,在销毁时thread_guard类对象的析构函数会自动调用thread类对象的join方法,从而保证thread不会异常终止。

但是这种方法太死板了,只会调用join方法。

我们可能希望自己选择detach或者join,也可能想要在thread对象销毁时做一些别的事情。

出于这种想法,本文提出了一种可扩展的智能析构线程,下面将对其进行介绍。

3. 可扩展的智能析构线程

首先,对于thread对象析构时不同的处理,这里使用了策略模式。通过提供不同的策略类,就可以扩展出不同的析构行为。

同时,目前实现的策略类没有自己的成员函数,所以采用了单例模式来创建,避免创建出大量相同的对象而造成内存浪费。

最后,通过简单工厂模式来获取策略类。

下面展示一下具体的代码:

#include <iostream>
#include <thread>using namespace std;class thread_destroy_strategy
{
public:virtual void destroy(thread& t)const = 0;virtual ~thread_destroy_strategy() = default;
};class join_strategy : public thread_destroy_strategy
{
public:static join_strategy* getInstance(){static join_strategy instance;return &instance;}void destroy(thread& t)const override{if (t.joinable()){t.join();cout << "Thread " << this_thread::get_id() << " joined" << endl;}}
};class detach_strategy : public thread_destroy_strategy
{
public:static detach_strategy* getInstance(){static detach_strategy instance;return &instance;}void destroy(thread& t)const override{if (t.joinable()){t.detach();cout << "Thread " << this_thread::get_id() << " detached" << endl;}}
};enum class EThreadStrategy
{JOIN,DETACH
};class strategyFactory
{
public:static thread_destroy_strategy* getStrategy(EThreadStrategy strategy){switch (strategy){case EThreadStrategy::JOIN:return join_strategy::getInstance();case EThreadStrategy::DETACH:return detach_strategy::getInstance();default:return nullptr;}}
};class auto_thread
{
public:template<typename F, typename... Args>auto_thread(F&& f, Args&&... args) : t(forward<F>(f), forward<Args>(args)...) {}~auto_thread(){thread_destroy_strategy* pStrategy = strategyFactory::getStrategy(strategy);if (pStrategy){pStrategy->destroy(t);}}auto_thread(const auto_thread&) = delete;auto_thread& operator=(const auto_thread&) = delete;public:void setStrategy(EThreadStrategy strategy_){strategy = strategy_;}
private:thread t;EThreadStrategy strategy = EThreadStrategy::JOIN;
};void threadFunc()
{cout << "Hello from thread" << endl;
}int main()
{auto_thread t(threadFunc);t.setStrategy(EThreadStrategy::JOIN); // 默认就是JOIN策略, 也可以设置为DETACH策略
}

策略类在destroy时打印了一下线程id。

运行结果如下图所示:

以上就是本文的全部内容

http://www.hengruixuexiao.com/news/6261.html

相关文章:

  • 咸阳做企业网站头条新闻最新消息
  • Pc端做社区网站用什么框架重庆网站推广联系方式
  • 河北建设厅网站登录密码错误谷歌搜索入口365
  • 昆山网站建设多少钱quark搜索引擎入口
  • 怒江州城乡建设局网站百度seo快速排名优化软件
  • 手机网站快速排名 软件我要软文网
  • 侦探公司做网站的资料大连企业网站建站模板
  • 国外做论坛网站网店推广平台
  • 石家庄建设局网站怎么打不开香水推广软文
  • 免费铺货诚招代理商seo引擎优化外包公司
  • 服务器怎么装网站吗网站建设方案
  • 昆明高端网站建设公司如何用html制作网页
  • wordpress 在线字体百度词条优化
  • 西宁哪里做网站百度广告推广收费标准
  • 淄博周村网站建设方案山西seo排名厂家
  • 电子商务网站建设作业总结seo技巧与技术
  • 网站建设案例方案哈尔滨网站制作软件
  • wordpress删除rss快速排名生客seo
  • wordpress授权代码站外seo推广
  • 东莞华商网络科技有限公司点金推广优化公司
  • 易班班级网站建设展示PPT制作链接的小程序
  • 电子商务有哪些职业抖音搜索seo
  • 企业网站建设定制seo搜索引擎招聘
  • 淘宝如何在其他网站做优惠搜索引擎排名谷歌
  • 栾城做网站seo推广软件排行榜
  • 怎么弄数据库备份做网站长沙网站设计拓谋网络
  • 广州做网站优化公司报价淘宝的17种免费推广方法
  • WordPress秀人网采集电子商务seo
  • 汽贸公司网站建设神马seo教程
  • 微信h5页面制作教程优化网络的软件