diff --git a/README.md b/README.md index 02ddaf23..415527f9 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ # 现代C++并发编程教程 -本仓库用来存放 B 站课程[《现代 C++ 并发编程教程》]()的教案、代码。 +本仓库用来存放 B 站课程[《现代 C++ 并发编程教程》](https://www.bilibili.com/cheese/play/ss34184)的教案、代码。 不管是否购买课程,任何组织和个人遵守 [CC BY-NC-ND 4.0](https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh-hans) 协议均可随意使用学习。 diff --git a/SUMMARY.md b/SUMMARY.md deleted file mode 100644 index cb06bc84..00000000 --- a/SUMMARY.md +++ /dev/null @@ -1,14 +0,0 @@ -# Summary - -* [首页](README.md) -* [阅读须知](md/README.md) -* [基本概念](md/01基本概念.md) -* [使用线程](md/02使用线程.md) -* [共享数据](md/03共享数据.md) -* [同步操作](md/04同步操作.md) -* [内存模型与原子操作](md/05内存模型与原子操作.md) -* [协程](md/06协程.md) -* [详细分析](md/详细分析/README.md) - * [`std::thread` 的构造-源码解析](md/详细分析/01thread的构造与源码解析.md) - * [`std::scoped_lock` 的源码实现与解析](md/详细分析/02scoped_lock源码解析.md) - * [`std::async` 与 `std::future` 源码解析](md/详细分析/03async与future源码解析.md) diff --git "a/md/05\345\206\205\345\255\230\346\250\241\345\236\213\344\270\216\345\216\237\345\255\220\346\223\215\344\275\234.md" "b/md/05\345\206\205\345\255\230\346\250\241\345\236\213\344\270\216\345\216\237\345\255\220\346\223\215\344\275\234.md" index 94e41e85..1b576d77 100644 --- "a/md/05\345\206\205\345\255\230\346\250\241\345\236\213\344\270\216\345\216\237\345\255\220\346\223\215\344\275\234.md" +++ "b/md/05\345\206\205\345\255\230\346\250\241\345\236\213\344\270\216\345\216\237\345\255\220\346\223\215\344\275\234.md" @@ -228,7 +228,7 @@ struct trivial_type { > > 最后强调一下:任何 [std::atomic](https://zh.cppreference.com/w/cpp/atomic/atomic) 类型,**初始化不是原子操作**。 -### `st::atomic_flag` +### `std::atomic_flag` `std::atomic_flag` 是最简单的原子类型,这个类型的对象可以在两个状态间切换:**设置(true)**和**清除(false)**。它很简单,通常只是用作构建一些库设施,不会单独使用或直接面向普通开发者。 @@ -815,4 +815,4 @@ RISC-V 采用的也是**弱序内存模型**(weakly-ordered memory model), \ No newline at end of file +--> diff --git "a/md/06\345\215\217\347\250\213.md" "b/md/06\345\215\217\347\250\213.md" index e696832f..eeb2e994 100644 --- "a/md/06\345\215\217\347\250\213.md" +++ "b/md/06\345\215\217\347\250\213.md" @@ -1,9 +1,23 @@ # 协程 +## 前言 + 既然是“**现代**” C++ 并发编程教程,怎么能不聊协程呢? C++20 引入了协程语法,新增了三个用作协程的关键字:`co_await`、`co_yield`、`co_return`。但并未给出标准**协程库**,协程库在 C++23 被引入。 -希望您拥有 `gcc14`、`clang18`,最新的 MSVC。 +希望您拥有 `gcc14`、`clang19`,`Visual Studio 2022 17.11`。 + +我们假设您对 C++20 的协程一无所知、假设您对协程这个概念一无所知、假设您不了解其它语言的协程实现(如 Python、java)。 + +--- + +绝大多数人对协程基本可以说是一无所知,但是应该都听过这个名字,大概是因为这些编程语言都在新版本中引入它作为核心语言特性。 + +这带来了许多的热度,不过这并不完全算是好事,许多的营销号一样的讲述,基本全部都是错误的。 + +据我所知,在我在 B站发布正经 C++20 协程的教学视频之前,几乎所有打着 C++ 旗号说什么协程的,都是胡言乱语。不过也有一些不错的,如:[**等疾风**](https://space.bilibili.com/35186937)、[**happyyang的百草园**](https://space.bilibili.com/312883756),都出过至少算作正经的 C++20 协程的教学视频。 + +- **C++20 的协程是复杂的**。 -> C++ 20 协程的使用尚不成熟,等待后续更新讲解..... +不管是使用上还是概念上,引入了许多新颖的做法。