线程池(带有详细解释)
https://www.cnblogs.com/lzpong/p/6397997.htm
线程池100
https://blog.csdn.net/gcola007/article/details/78750220
线程池程序768
https://blog.csdn.net/yfcheng_yzc/article/details/54291817
泛化之美--C++11可变模版参数的妙用
https://www.cnblogs.com/qicosmos/p/4325949.html
条件变量
https://blog.csdn.net/fengbingchun/article/details/73695596
条件变量wait()
condition_variable::wait 方法 阻塞线程
void wait(
unique_lock<mutex>& Lck
);
template<class Predicate>
void wait(
unique_lock<mutex>& Lck,
Predicate Pred
);
Lck
unique_lock<mutex> 对象。
Pred
返回 true 或 false的任何表达式
第一个方法进行阻止,直到 condition_variable 对象由调用终止到 notify_one 或 notify_all。 它也可以不合逻辑地唤醒。
第二个方法实际执行以下代码。
while(!Pred())
wait(Lck);
引用限定符
引用限定符就是限制调用成员函数的对象有引用限定
&表示成员函数调用的对象需要是引用类型
&&表示成员函数调用对象需要是右值引用。
c++11新特性之future、std::async
std::future可以从异步任务中获取结果,一般与std::async配合使用,std::async用于创建异步任务,实际上就是创建一个线程执行相应任务。
https://www.cnblogs.com/taiyang-li/p/5914167.html
线程池100的部分解释:
1、queue 是队列类, front() 获取头部元素, pop() 移除头部元素;back() 获取尾部元素,push() 尾部添加元素
2、packaged_task 就是任务函数的封装类,通过 get_future 获取 future , 然后通过 future 可以获取函数的返回值(future.get());packaged_task 本身可以像函数一样调用 () ;
3、make_shared 用来构造 shared_ptr 智能指针。用法大体是 shared_ptr<int> p = make_shared<int>(4) 然后 *p == 4 。智能指针的好处就是, 自动 delete !https://blog.csdn.net/yagerfgcs/article/details/72886630
4、forward() 函数,类似于 move() 函数,后者是将参数右值化,前者是... 肿么说呢?大概意思就是:不改变最初传入的类型的引用类型(左值还是左值,右值还是右值);