摘要: lock_guard<T> 使用的RAII机制,互斥量在lock_guard<T>对象构造时lock,在其析构时unlock。主要是为了解决在手动lock和unlock时忘记unlock的情况。lock_guard类不可复制,因为一个对象只能关联一个mutex。 锁的粒度 锁的粒度用来描述通过一个锁 阅读全文
posted @ 2020-06-07 22:25 Chen沉尘 阅读(491) 评论(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沉尘 阅读(723) 评论(0) 推荐(0) 编辑
摘要: 转自绿色冰点C++11 std::ref使用场景 C++本身有引用(&),为什么C++11又引入了std::ref(或者std::cref)?使用std::ref可以在模板传参的时候传入引用,否则只能传值。主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用。如下例子: 阅读全文
posted @ 2020-06-07 11:11 Chen沉尘 阅读(1876) 评论(0) 推荐(0) 编辑
摘要: 线程可以共享进程的内存空间,线程拥有自己独立内存。 关于参数的传递,std::thread的构造函数只会单纯的复制传入的变量,特别需要注意的是传递引用时,传入的是值的副本,也就是说子线程中的修改影响不了主线程中的值。 值传递 主线程中的值,被拷贝一份传到了子线程中。 1 #include <iost 阅读全文
posted @ 2020-06-07 10:54 Chen沉尘 阅读(12101) 评论(3) 推荐(1) 编辑
摘要: 基础 detach()的作用是将子线程和主线程的关联分离,也就是说detach()后子线程在后台独立继续运行,主线程无法再取得子线程的控制权,即使主线程结束,子线程未执行也不会结束。当主线程结束时,由运行时库负责清理与子线程相关的资源。实际应用如让一个文字处理应用同时编辑多个文档,让每个文档处理窗口 阅读全文
posted @ 2020-06-07 10:49 Chen沉尘 阅读(18255) 评论(1) 推荐(1) 编辑
摘要: 基础 join()函数的作用是让主线程的等待该子线程完成,然后主线程再继续执行。这种情况下,子线程可以安全的访问主线程中的资源。子线程结束后由主线程负责回收子线程资源。一个子线程只能调用join()和detach()中的一个,且只允许调用一次。可以调用joinable()来判断是否可以成功调用joi 阅读全文
posted @ 2020-06-06 16:30 Chen沉尘 阅读(12114) 评论(0) 推荐(1) 编辑
摘要: 创建线程 子线程在创建时启动。使用功能std::thread类创建线程对象。 线程关联的可调对象可以是:普通函数、仿函数对象、Lambda表达式、非静态成员函数、静态成员函数。 示例 普通函数 1 #include <thread> 2 #include <iostream> 3 4 using n 阅读全文
posted @ 2020-06-06 11:29 Chen沉尘 阅读(5815) 评论(0) 推荐(0) 编辑
摘要: C 标准库的assert.h头文件提供了一个名为assert的宏,它可用于验证程序做出的假设,并在假设为假时输出诊断消息。assert 的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向 stderr 打印一条出错信息,然后通过调用 abort 来终止程序运行。 ass 阅读全文
posted @ 2020-06-04 15:21 Chen沉尘 阅读(490) 评论(0) 推荐(0) 编辑
摘要: 存储器管理的主要对象是内存,由于对外存的管理与对内存的管理相类似,只是它们的用途不同,即外存主要用来存放文件。 存储器的层次结构 对于通用计算机而言,存储层次至少应具有三级:最高层为CPU寄存器,中间为主存,最底层是辅存。可以细划为寄存器、高速缓存、主存储器、磁盘缓存、固定磁盘、可移动存储介质等6 阅读全文
posted @ 2020-06-03 18:35 Chen沉尘 阅读(1541) 评论(0) 推荐(0) 编辑
摘要: explicit作用 阻止类构造函数的隐式自动转换。 由于C++的构造函数是默认支持隐式转换的(即默认是关键字implicit修饰)。 explicit使用场景 修饰只含一个参数的构造函数; 修饰除了第一个参数外其余参数都有默认值的构造函数。 当在上面两种情况以外的构造函数前加explicit时,e 阅读全文
posted @ 2020-06-01 20:18 Chen沉尘 阅读(130) 评论(0) 推荐(0) 编辑