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

网站备案会过期吗建企业网站

网站备案会过期吗,建企业网站,济南网站制作网站,安宁网站建设 熊掌号目录 实现一个无返回的线程池 完全代码实现 Reference 实现一个无返回的线程池 实现一个简单的线程池非常简单#xff0c;我们首先聊一聊线程池的定义#xff1a; 线程池#xff08;Thread Pool#xff09; 是一种并发编程的设计模式#xff0c;用于管理和复用多个线程…目录 实现一个无返回的线程池 完全代码实现 Reference 实现一个无返回的线程池 实现一个简单的线程池非常简单我们首先聊一聊线程池的定义 线程池Thread Pool 是一种并发编程的设计模式用于管理和复用多个线程以提高程序的性能和资源利用率。它的核心思想是预先创建一组线程并将任务分配给这些线程执行而不是为每个任务单独创建和销毁线程。线程池广泛应用于需要处理大量短期任务的场景例如 Web 服务器、数据库连接池、任务调度系统等。换而言之线程池说白了就是一种饿汉思维——直接预先提供若干的线程由线程池内部控制调度确保我们可以只关心任务的提交以及完成。 我们下面要做的是设计一个任务是不返回的线程池。所以我们约束我们的函数是 using supportive_task_type std::functionvoid(); 下一步就是构造我们的线程池的线程。注意的是——线程和任务是解耦合的意味着我们需要一个中间函数解耦合任务派发。笔者决定将任务派发分到一个私有函数完成 CCThreadPool(const int workers_num) {for(int i 0; i workers_num; i){internal_threads.emplace_back([this](){__scheduled();});}} 上面这个代码很简单就是将每一个线程都分配一个调度函数这个调度函数来委派分发任务办法说简单也很简单 void __scheduled(){while(1){// sources protectionsstd::unique_lockstd::mutex locker(internal_mutex);// waiting for the access of the task resourcescontrolling_cv.wait(locker, [this]{return thread_pool_status || !tasks_queue.empty();});// quit if requriedif(thread_pool_status tasks_queue.empty()){return;}// 现在我们可以取到任务执行了supportive_task_type task(std::move(tasks_queue.front()));tasks_queue.pop();locker.unlock();task();}} 当析构的时候我们也要通知所有线程的cv不要睡眠了由于设置了thread_pool_status是true直接线程跳出来结束全文。 ~CCThreadPool(){thread_pool_status true;controlling_cv.notify_all();for(auto thread : internal_threads){thread.join();}} 完全代码实现 #include condition_variable #include functional #include mutex #include print #include queue #include thread #include utility #include vector ​ class CCThreadPool {public:CCThreadPool()                         delete;CCThreadPool(const CCThreadPool )     delete;CCThreadPool operator(CCThreadPool ) delete; ​CCThreadPool(const int workers_num) {for(int i 0; i workers_num; i){internal_threads.emplace_back([this](){__scheduled();});}} ​~CCThreadPool(){thread_pool_status true;controlling_cv.notify_all();for(auto thread : internal_threads){thread.join();}} ​templatetypename F, typename... Argsvoid enTask(F f, Args... args){supportive_task_type task(std::bind(std::forwardF(f), std::forwardArgs(args)...));{std::unique_lockstd::mutex locker(internal_mutex);tasks_queue.emplace(std::move(task));}controlling_cv.notify_one();} ​private:void __scheduled(){while(1){std::unique_lockstd::mutex locker(internal_mutex);controlling_cv.wait(locker, [this]{return thread_pool_status || !tasks_queue.empty();});// quitif(thread_pool_status tasks_queue.empty()){return;}supportive_task_type task(std::move(tasks_queue.front()));tasks_queue.pop();locker.unlock();task();}} ​using supportive_task_type std::functionvoid();std::vectorstd::thread internal_threads;std::queuesupportive_task_type tasks_queue;std::mutex internal_mutex;std::condition_variable controlling_cv;bool thread_pool_status false; }; ​ ​ int main() {std::println(Task start);CCThreadPool pool(4);for (int i 0; i 8; i) {pool.enTask([i] {std::println(Task {} is started at thread with id {}, i, std::this_thread::get_id());std::this_thread::sleep_for(std::chrono::seconds(1));std::println(Task {} is done, i);});}return 0; } Reference 8. C11 跨平台线程池-See的编程日记 (seestudy.cn)
http://www.laogonggong.com/news/111731.html

相关文章:

  • 做理财网站 程序员 违法吗建设部网站撤销注册资质的都是公职人员吗
  • 网站版心怎么做注册一家公司需要多少钱
  • 开福区城乡建设局网站android编程语言
  • 眼镜网站怎么做竞价专门做调研的网站
  • 网站正在建设中 色网站建设营销攻略
  • 网站制作哪里好西夏区建设交通网站
  • 如何判断网站程序使用asp还是phpwordpress安装悬浮qq
  • 网站流程示意wordpress开启xmlrppc
  • 网站建设用什么服务器seo教程 seo之家
  • 网站开发 兼职h5做的网站
  • 宁夏做网站小网站谁有
  • 做网站详细教程美食网站策划书
  • 移动网站建设商旅游兼职网站建设
  • 如何在自己的网站上做直播物业网站模板
  • 做网站无赖客户退款iis7.0搭建网站
  • 做网站怎么这么贵安康网站建设公司有哪些
  • 创新的邯郸网站建设上海闵行官网
  • 购物网站开发需要什么软件微网站设计
  • 网站建设市场趋势wordpress地址
  • 佛山市品牌网站建设公司wordpress金融插件
  • 电子商务网站平台不包括用php做电商网站有哪些
  • 什么是网站风格策划的重点然后制作网页
  • 鑫三科技网站设计东莞外贸优化公司
  • wordpress标签是干什么的seo插件wordpress
  • 建设银行官网学生交费网站西安微网站
  • 网站建设 引导it网站建设干嘛的
  • 网站 网络架构合肥网站建设哪个公司做得比较好
  • 饲料行业怎么做网站兰州seo整站优化服务商
  • 医院网站建设网站网站设计排行榜
  • jsp 做网站需要什么商标 做网站 是几类