下面是正文:
auto类型推导
auto可以让编译器在编译器就推导出变量的类型,看代码:
利用auto可以通过=右边的类型推导出变量的类型。
什么时候使用auto呢?简单类型其实没必要使用auto,然而某些复杂类型就有必要使用auto,比如lambda表达式的类型,async函数的类型等,例如:
智能指针
C 11新特性中主要有两种智能指针std::shared_ptr和std::unique_ptr。
那什么时候使用std::shared_ptr,什么时候使用std::unique_ptr呢?
当所有权不明晰的情况,有可能多个对象共同管理同一块内存时,要使用std::shared_ptr;
而std::unique_ptr强调的是独占,同一时刻只能有一个对象占用这块内存,不支持多个对象共同管理同一块内存。
两类智能指针使用方式类似,拿std::unique_ptr举例:
std::lock相关
C 11提供了两种锁封装,通过RAII方式可动态的释放锁资源,防止编码失误导致始终持有锁。
这两种封装是std::lock_guard和std::unique_lock,使用方式类似,看下面的代码:
普通情况下建议使用std::lock_guard,因为std::lock_guard更加轻量级,但如果用在条件变量的wait中环境中,必须使用std::unique_lock。
条件变量
条件变量是C 11引入的一种同步机制,它可以阻塞一个线程或多个线程,直到有线程通知或者超时才会唤醒正在阻塞的线程,条件变量需要和锁配合使用,这里的锁就是上面介绍的std::unique_lock。
这里使用条件变量实现一个CountDownLatch:
原子操作
C 11提供了原子类型std::atomic,用于原子操作,使用这种方式既可以保证线程安全,也不需要使用锁来进行临界区保护,对一些普通变量来说尤其方便,看代码:
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。