前言
最近在GitHub查找一些C++项目代码,发现好多“莫名其妙”的熟悉中透露出陌生的用法,由于不在一线coding好多年,遂闲暇恶补下知识。不说了,进入正题,可能罗列的不是很全,没有其他博主的专项讲解深入,轻喷(●’◡’●)
特性介绍
内存模型
定义了多线程程序中内存访问的行为,主要是通过 atomic 和 mutex 来实现线程之间的同步。
- 共六种,分别是:memory_order_relaxed、memory_order_consume、memory_order_acquire、memory_order_release、memory_order_acq_rel和memory_order_seq_cst1。
- 上述的区别在于后面的定义,主要分为:
- sequentially-consistent模型:这是约束力最强的模型,确保所有操作按照程序中的顺序执行,但执行效率最低。
- acquire-release模型:约束力居中,确保读取操作在写入操作之后进行,执行效率也居中。
- relaxed模型:约束力最差,但执行效率最高,不保证操作的顺序。
#include <atomic> #include <thread> std::atomic<int> x(0); void thread1() { x.store(1, std::memory_order_relaxed); } void thread2() { int value = x.load(std::memory_order_relaxed); if (value == 1) { // do something } } int main() { std::thread t1(thread1); std::thread t2(thread2); t1.join(); t2.join(); return 0; }
auto 和 decltype
类型推导,懒人必备技能。
auto x = 5; // x 的类型是 int
decltype(x) y = 10; // y 的类型也是 int
template <typename T>
auto add(T a, T b) -> decltype(a + b) {
return a + b;
}
int main() {
int result = add(5, 10);
return 0;
}
范围 for
简化循环代码,省去之前冗余的写法。