Skip to content

Commit 26f0fea

Browse files
committed
add verifty
1 parent db75e94 commit 26f0fea

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"server": "hexo server"
1010
},
1111
"hexo": {
12-
"version": "7.2.0"
12+
"version": "7.3.0"
1313
},
1414
"dependencies": {
1515
"cheerio": "1.0.0",

source/_drafts/leveldb-source-memory-order.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,15 @@ mathjax: true
99
---
1010

1111

12+
C++11 引入了std::atomic类型,用于实现无锁编程,原子操作保证在多线程环境下的数据一致性。C++11 定义了6种内存序,用于控制原子操作的同步行为:
13+
14+
- memory_order_relaxed: 最宽松的内存序,只保证当前操作原子性。
15+
- memory_order_consume: 确保后续依赖于当前读取的操作不会被重排到当前读取之前。
16+
- memory_order_acquire: 确保当前读取操作之后的所有读写操作不会被重排到当前操作之前。
17+
- memory_order_release: 确保当前写入操作之前的所有读写操作不会被重排到当前操作之后。
18+
- memory_order_acq_rel: 结合了acquire和release语义。
19+
- memory_order_seq_cst: 最严格的内存序,提供全局的顺序一致性。
20+
1221

1322
这里用了 atomic 原子类型,保证了读写这个值的操作是原子的,不会被其他线程打断。如果不用原子操作,会出现下面这种竞争情况:
1423

@@ -27,6 +36,11 @@ mathjax: true
2736
下面来分析下这样做会不会有线程同步问题。我们知道,**编译器和处理器可能会对指令进行重排,只要这种重排不违反单个线程的执行逻辑就好**。上面 Insert 操作中,设置新高度和后面的更新节点指针顺序可能会被打乱。导致出现下面的情况:
2837

2938

39+
## 复现指令重排
40+
41+
有什么办法能稳定复现编译器或者 CPU 指令重排导致问题吗?
42+
43+
3044
[Memory Model and Synchronization Primitive - Part 1: Memory Barrier](https://www.alibabacloud.com/blog/597460)
3145

3246
[Memory Model and Synchronization Primitive - Part 2: Memory Model](https://www.alibabacloud.com/blog/memory-model-and-synchronization-primitive---part-2-memory-model_597461)

source/ads.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
google.com, pub-7746897490519544, DIRECT, f08c47fec0942fa0

0 commit comments

Comments
 (0)