摘要: lock_guard<T> 使用的RAII机制,互斥量在lock_guard<T>对象构造时lock,在其析构时unlock。主要是为了解决在手动lock和unlock时忘记unlock的情况。lock_guard类不可复制,因为一个对象只能关联一个mutex。 锁的粒度 锁的粒度用来描述通过一个锁 阅读全文
posted @ 2020-06-07 22:25 Chen沉尘 阅读(480) 评论(0) 推荐(0) 编辑
摘要: C++标准库中有很多资源占有(resource-owning)类型,比如 std::ifstream , std::unique_ptr 还有 std::thread 都是可移动(movable),但不可拷贝(cpoyable)。虽然, std::thread 实例不会如 std::unique_p 阅读全文
posted @ 2020-06-07 11:44 Chen沉尘 阅读(709) 评论(0) 推荐(0) 编辑
摘要: 转自绿色冰点C++11 std::ref使用场景 C++本身有引用(&),为什么C++11又引入了std::ref(或者std::cref)?使用std::ref可以在模板传参的时候传入引用,否则只能传值。主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用。如下例子: 阅读全文
posted @ 2020-06-07 11:11 Chen沉尘 阅读(1832) 评论(0) 推荐(0) 编辑
摘要: 线程可以共享进程的内存空间,线程拥有自己独立内存。 关于参数的传递,std::thread的构造函数只会单纯的复制传入的变量,特别需要注意的是传递引用时,传入的是值的副本,也就是说子线程中的修改影响不了主线程中的值。 值传递 主线程中的值,被拷贝一份传到了子线程中。 1 #include <iost 阅读全文
posted @ 2020-06-07 10:54 Chen沉尘 阅读(11937) 评论(3) 推荐(1) 编辑
摘要: 基础 detach()的作用是将子线程和主线程的关联分离,也就是说detach()后子线程在后台独立继续运行,主线程无法再取得子线程的控制权,即使主线程结束,子线程未执行也不会结束。当主线程结束时,由运行时库负责清理与子线程相关的资源。实际应用如让一个文字处理应用同时编辑多个文档,让每个文档处理窗口 阅读全文
posted @ 2020-06-07 10:49 Chen沉尘 阅读(17924) 评论(1) 推荐(1) 编辑