线程池
懵圈丰
这个作者很懒,什么都没留下…
展开
-
c++11 线程池系列之一 最简单的线程池
线程池最简单的形式是含有一个固定数量的工作线程来处理任务,典型的数量是std::thread::hardware_concurrency().当有任务要处理时,调用一个函数将任务放到等待队列中。每个工作线程都是从该队列中取出任务,执行完任务后继续从等待队列取出更多的任务来处理。在最简单的情况,没有办法来等待一个任务完成。如需要这样的功能,则需要用户自己维护同步。下面上代码class t原创 2015-11-28 16:48:59 · 2902 阅读 · 0 评论 -
c++11 线程池系列之一 所需要的thread_safe_queue
templateclass thread_safe_queue{private: mutable std::mutex mut; std::queue> data_queue; std::condition_variable data_con;public: thread_safe_queue(){} thread_safe_queue(thread_safe_queue con原创 2015-11-28 16:50:59 · 4136 阅读 · 0 评论 -
c++11 线程池系列之一 所需要的join_threads
class join_threads{std::vector &threads;public: explicit join_threads(std::vector &threads_):threads(threads_){} ~join_threads() { for(unsigned long i = 0 ; i < threads.size();++i) { if(threa原创 2015-11-28 16:52:19 · 2061 阅读 · 0 评论 -
c++11,线程池之二--有等待线程池中任务完成功能的线程池
#include #include #include #include #include #include class function_wrapper{ struct impl_base { virtual void call()=0; virtual ~impl_base() {} }; std::unique_ptr i原创 2015-11-28 19:55:05 · 1123 阅读 · 0 评论 -
c++ 并发系统访问 测试 调试方法/策略
如果在单核系统中没有错误,但是在多核系统或多处理器中出错,可能是竞争条件错误或者同步、内存顺序错误。测试实例的应用场景:1、在一个线程自身队列上调用push()或pop()来验证该队列工作基础级别2、在一个空队列上一个线程调用push(),另一个线程调用pop()3、在一个空队列上多个线程调用push()4、在一个满队列上多个线程调用push()5、在一个空队列上多个线程调原创 2015-12-02 10:32:58 · 594 阅读 · 0 评论 -
在一个多线程系统中,主进程应该写什么?
在一个多线程的系统中,主线程应该不占资源,而且不应该结束。遵循此原则,在c++的系统中,用c++11的代码实现在主线程中等待主线程被唤醒,且不结束。#include #include std::mutex m_wt; std::unique_lock lk(m_wt); std::condition_variable wt;//在主线程结束之前 wt.wait(lk);原创 2015-12-02 10:52:13 · 1070 阅读 · 0 评论