Skip to content

Commit a8bd60e

Browse files
committed
修改 C++20 屏障 std::barrier 的第二个示例与解释,让其代码更加直观 #12
1 parent b632820 commit a8bd60e

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

Diff for: md/04同步操作.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -1498,10 +1498,10 @@ std::barrier barrier{ 4,
14981498
}
14991499
};
15001500
1501-
void f(int thread_id){
1502-
for (int i = 0; i < 5; ++i) {
1501+
void f(int thread_id) {
1502+
for (int i = 1; i <= 5; ++i) {
15031503
std::osyncstream{ std::cout } << "线程 " << thread_id << " 输出: " << i << '\n';
1504-
if (i == 2 && thread_id == 2) { // 假设线程ID为2的线程在输出完2后退出
1504+
if (i == 3 && thread_id == 2) { // 假设线程 ID 为 2 的线程在完成第三轮同步后退出
15051505
std::osyncstream{ std::cout } << "线程 " << thread_id << " 完成并退出\n";
15061506
--active_threads; // 减少活跃线程数
15071507
barrier.arrive_and_drop(); // 减少当前计数 1,并减少重置计数 1
@@ -1511,17 +1511,17 @@ void f(int thread_id){
15111511
}
15121512
}
15131513
1514-
int main(){
1514+
int main() {
15151515
std::vector<std::jthread> threads;
15161516
for (int i = 1; i <= 4; ++i) {
15171517
threads.emplace_back(f, i);
15181518
}
15191519
}
15201520
```
15211521
1522-
> [运行](https://godbolt.org/z/csor1bq8d)测试。
1522+
> [运行](https://godbolt.org/z/T7WYeYGd1)测试。
15231523
1524-
初始线程有 4 个,线程 2 在执行了两轮同步之后便直接退出了,调用 `arrive_and_drop` 函数,下一个阶段的计数会重置为 `3`也就是只有三个活跃线程继续执行。查看输出结果,非常的直观。
1524+
初始线程有 4 个,线程 2 在执行了**三轮**同步便直接退出了,调用 `arrive_and_drop` 函数,下一个阶段的计数会重置为 `3`也就是执行完第三轮同步后只有**三个活跃线程**继续执行。查看输出结果,非常的直观。
15251525
15261526
这样,`arrive_and_drop` 的作用就非常明显了,使用也十分的简单。
15271527

0 commit comments

Comments
 (0)