4 - 原子操作库atomic
原子类型允许原子访问,这意味着不需要额外的同步机制就可执行并发的读写操作。没有原子操作,递增变量就不是线程安全的。因为编译器首先将值从内存加载到寄存器中,递增后再把结果保存回内存。另一个线程可能在递增操作执行中接触到内存,导致数据争用。
为使此情形线程安全且不显式地使用任何同步机制,原子类型std::atomic
便派上用场。
原子类型允许原子访问,这意味着不需要额外的同步机制就可执行并发的读写操作。没有原子操作,递增变量就不是线程安全的。因为编译器首先将值从内存加载到寄存器中,递增后再把结果保存回内存。另一个线程可能在递增操作执行中接触到内存,导致数据争用。
为使此情形线程安全且不显式地使用任何同步机制,原子类型std::atomic
便派上用场。
在C++20中引入了std::jthread
,和之前的std::thread
相比,它:
join()
,防止应用程序被意外终止本文将简要介绍一下它的用法。
本文将会介绍如何用<thread>
线程库创建一个线程,包括使用函数指针,可调用对象等方式创建;以及线程的阻塞/挂起操作;线程参数的传递;一些概念等内容。
几十年前,程序都是单线程的,CPU市场竞争的是最高频率。但在05年左右单核处理器的性能达到瓶颈,CPU市场开始竞争单个处理器芯片中的最多核心数目,多线程编程便开始发展,并成为主流。通过多线程编程课并行执行多个计算,充分利用系统中多个处理器单元。
C++98/03不支持多线程编程,必须借助第三方库或目标操作系统的多线程API,十分麻烦;而从C++11开始,有了一个标准的多线程库,使编写跨平台的多线程应用程序更容易了。
本文将会介绍一些多线程编程相关的概念,例如并行和并发的区别,什么是争用条件等。