原子类型允许原子访问,这意味着不需要额外的同步机制就可执行并发的读写操作。没有原子操作,递增变量就不是线程安全的。因为编译器首先将值从内存加载到寄存器中,递增后再把结果保存回内存。另一个线程可能在递增操作执行中接触到内存,导致数据争用。

为使此情形线程安全且不显式地使用任何同步机制,原子类型std::atomic便派上用场。

阅读全文 »

在C++20中引入了std::jthread,和之前的std::thread相比,它:

  • 在析构函数中自动join(),防止应用程序被意外终止
  • 支持所谓的协作式取消,即这种线程需要定期检查它是否需要取消自己

本文将简要介绍一下它的用法。

阅读全文 »

几十年前,程序都是单线程的,CPU市场竞争的是最高频率。但在05年左右单核处理器的性能达到瓶颈,CPU市场开始竞争单个处理器芯片中的最多核心数目,多线程编程便开始发展,并成为主流。通过多线程编程课并行执行多个计算,充分利用系统中多个处理器单元

C++98/03不支持多线程编程,必须借助第三方库或目标操作系统的多线程API,十分麻烦;而从C++11开始,有了一个标准的多线程库,使编写跨平台的多线程应用程序更容易了。

本文将会介绍一些多线程编程相关的概念,例如并行和并发的区别,什么是争用条件等。

阅读全文 »

C++标准库包含一个文件系统支持库,定义在<filesystem>中,并且位于std::filesystem名称空间中。它允许编写可移植的代码来处理文件系统,例如查询某路径是目录(Dir)还是文件(File),遍历路径内容,检索文件信息等操作。

阅读全文 »
0%