Skip to content

Files

This branch is up to date with Mq-b/ModernCpp-ConcurrentProgramming-Tutorial:main.

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Sep 13, 2024
Aug 3, 2024
Oct 16, 2024
Sep 24, 2024
Oct 19, 2024
Oct 9, 2024
Oct 13, 2024
Sep 8, 2024

阅读须知

  本套教程侧重点在于使用 C++ 并发支持库进行多线程编程。我们假设读者最低水平为:C++11 + STL + template,可能没有接触过 C++ 标准并发库,假设略微了解操作系统基本知识。

  我们强调了模板,因为并发支持库的很多设施其实现是较为简单的,概念与使用,再结合源码讲解会更加简单直观,然而要想阅读学习源码,模板的知识必不可少。不需要模板的水平有多高,也不需要会什么元编程,但是基本的需求得能做到,得会,这里推荐一下:《现代C++模板教程》

  本教程不保证你学习之后的成果,不过依然可以自信地说:本教程在中文社区的同类型教程中是绝对的第一。事实上只需要一句话就可以表达了——伟大无需多言

学习注意事项

  我们的教程中常包含许多外部链接,这并非当前描述不足或者不够严谨,而是为了考虑读者的水平和可能的扩展学习需求。同时,也希望能让读者避免获取二手知识与理解,我们提供的链接基本都是较为专业的文档或官方网站。

  虽然教程名为《现代 C++ 并发编程教程》,但我们也扩展涉及了许多其他知识,包括但不限于:Win32、POSIX API;MSVC STL、libstdc++、libc++ 对标准库的实现;GCC 与 MSVC 的编译器扩展,以及 Clang 对它们的兼容;使用 CMake + Qt 构建带 UI 的程序,展示多线程异步的必要性;不同架构的内存模型(例如 x86 架构内存模型:Total Store Order (TSO),较为严格的内存模型)。

  既然强调了“现代”,那自然是全方面的,具体的读者会在学习中感受到的。

  另外我们的代码都会测试三大编译器 ClangGCCMSVC。通常都会是最新的,Clang18GCC14。我们的教程中常常会提供 Complier Explorer 的运行测试链接以确保正确性,以及方便读者的测试与学习。如果你对此网站的使用不熟悉,可以阅读使用文档

代码风格

  我们的代码风格较为简洁明了,命名全部使用下划线连接,而不是驼峰命名法。花括号通常只占一行,简短的代码可以不额外占行。一般初始化时使用 {},而非 () 或者 = 。这样简单直观,避免歧义和许多问题。#include 引入头文件时需要在尖括号或引号前后加空格。

#include <iostream>

struct move_only{
    move_only() { std::puts("默认构造"); }
    move_only(move_only&&)noexcept { std::puts("移动构造"); }
    move_only& operator=(move_only&&) noexcept {
        std::puts("移动赋值");
        return *this;
    }
    move_only(const move_only&) = delete;
};

int main(){
    move_only m{};
    char buffer[1024]{} // 全部初始化为 0
}

如果是标量类型,可能考虑使用复制初始化,而非 {},如:int n = 0;

总结

  本教程长期维护,接受 pr 与 issue。

  好了,稍微了解了一下,我们可以开始进入正式的学习内容了。