Skip to content

Commit 77689b0

Browse files
committed
修改“原子类型 std::atomic ”一节中少部分笔误与措辞
1 parent 84ad783 commit 77689b0

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

md/05内存模型与原子操作.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ void f(){
2424

2525
线程 C 到底读取到多少不确定,a 的值是多少也不确定。显然,这构成了数据竞争,出现了[未定义行为](https://zh.cppreference.com/w/cpp/language/ub)
2626

27-
在之前的内容中,我们讲述了使用很多设施,如互斥量,来保护共享资源。
27+
在之前的内容中,我们讲述了使用很多同步设施,如互斥量,来保护共享资源。
2828

2929
```cpp
3030
std::mutex m;
@@ -34,9 +34,9 @@ void f() {
3434
}
3535
```
3636

37-
通过互斥量的保护,即使 `++a` 本身不是原子操作,**逻辑上也可视为原子操作**互斥量确保了对共享资源的访问是线程安全的,避免了数据竞争问题。
37+
通过互斥量的保护,即使 `++a` 本身不是原子操作,**逻辑上也可视为原子操作**互斥量确保了对共享资源的读写是线程安全的,避免了数据竞争问题。
3838

39-
不过这显然不是我们的重点C++11 引入了原子类型 [`std::atomic`](https://zh.cppreference.com/w/cpp/atomic/atomic)在下文我们会详细讲解
39+
不过这显然不是我们的重点。我们想要的是一种**原子类型**,它的所有操作都直接是**原子**的,不需要额外的同步设施进行保护。C++11 引入了原子类型 [`std::atomic`](https://zh.cppreference.com/w/cpp/atomic/atomic)在下节我们会详细讲解
4040

4141
## 原子类型 `std::atomic`
4242

@@ -50,7 +50,7 @@ void f() {
5050
std::atomic<int>::is_always_lock_free // true 或 false
5151
```
5252

53-
标准库还提供了一组宏 [`ATOMIC_xxx_LOCK_FREE`](https://zh.cppreference.com/w/cpp/atomic/atomic_is_lock_free)在编译时对各种整形原子类型是否无锁进行判断
53+
标准库还提供了一组宏 [`ATOMIC_xxx_LOCK_FREE`](https://zh.cppreference.com/w/cpp/atomic/atomic_is_lock_free)在编译时对各种整数原子类型是否无锁进行判断
5454

5555
```cpp
5656
// (C++11 起)
@@ -95,7 +95,7 @@ else {
9595

9696
> [运行](https://godbolt.org/z/q5x7Wfd5r)测试。
9797

98-
如你所见,我们写了一个简单的示例,展示了使用 C++17 的静态数据成员 `is_always_lock_free` 、以及宏,执行不同的代码
98+
如你所见,我们写了一个简单的示例,展示了如何使用 C++17 的静态数据成员 `is_always_lock_free` 和预处理宏来让程序执行不同的代码
9999

100100
因为 `is_always_lock_free` 是编译期常量,所以我们可以使用 C++17 引入的 `constexpr if` ,它可以在编译阶段进行决策,避免了运行时的判断开销,提高了性能。
101101

0 commit comments

Comments
 (0)