![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
blablablabla__
c++爱好者
展开
-
C++11线程安全队列
多线程编程需要实现一个线程安全的队列,上锁,避免多个线程同时读写代码:/** * 线程安全的队列 */#ifndef __THREAD_SAFE_QUEUE__#define __THREAD_SAFE_QUEUE__#include #include #include #include template class thread_safe_queue{pr原创 2017-05-22 18:37:18 · 1584 阅读 · 0 评论 -
C++11线程池的实现
线程池是指定线程创建的个数,每个线程只是创建销毁一次。比起毫无限制的创建线程销毁线程效率更高。毕竟频繁的创建销毁线程会消耗系统资源,而且系统创建线程也是有上限的。基于上一篇的线程安全队列实现class thread_pool{private: atomic_bool done; //原子操作 vector work_thread;//工作线程 thr原创 2017-06-05 11:28:46 · 367 阅读 · 0 评论 -
c++类型转换
类型转换一 dynamic_cast在继承体系中安全的向下转型,如何指针类型转型失败返回一个空指针,如果是引用则抛出一个异常#include using namespace std;class A{ virtual void fun() { }};class B:public A{public: void原创 2017-07-20 13:04:05 · 245 阅读 · 0 评论 -
boost多个关键字索引multi_index_container
根据不同的索引排序结构体。其中tag的意思是这定一个标记,如果不指定的话默认是从0开始,以下例子展示了这两种用法代码:#include #include #include #include #include using namespace boost;using namespace boost::multi_index;using namespace std;struct原创 2017-07-19 01:04:05 · 2444 阅读 · 0 评论 -
返回值优化
编译器在默认情况下,是开启了返回值优化的struct A{ A(){ cout>>1"<<endl; } A(const A& b){ cout>>2"<<endl; } A(A&&b){ cout>>3"<<endl; } ~A() { cout<<"<<<"<<endl; } int a = 0;};A ret_A(){ A a; return原创 2017-09-13 23:59:08 · 941 阅读 · 0 评论 -
关于std::move与右值引用
关于std::move与右值引用 先来看一个例子class A { public: A(){ arr_ = new int[10](); len_ = 10; } A(A && a) { arr_ = a.arr_; a.arr_ = nullptr; len_ = a.len_; }原创 2017-12-15 21:41:50 · 605 阅读 · 0 评论 -
future 与async 的一个实例
#include <iostream>#include <future>#include <thread>#include <chrono>void print(char c) { for (int i = 0;i<10;i++) { std::cout <<c<<std::flush;...原创 2018-06-01 12:56:47 · 826 阅读 · 0 评论