File tree 1 file changed +6
-6
lines changed
1 file changed +6
-6
lines changed Original file line number Diff line number Diff line change @@ -1498,10 +1498,10 @@ std::barrier barrier{ 4,
1498
1498
}
1499
1499
};
1500
1500
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) {
1503
1503
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 的线程在完成第三轮同步后退出
1505
1505
std::osyncstream{ std::cout } << "线程 " << thread_id << " 完成并退出\n";
1506
1506
--active_threads; // 减少活跃线程数
1507
1507
barrier.arrive_and_drop(); // 减少当前计数 1,并减少重置计数 1
@@ -1511,17 +1511,17 @@ void f(int thread_id){
1511
1511
}
1512
1512
}
1513
1513
1514
- int main(){
1514
+ int main() {
1515
1515
std::vector<std::jthread> threads;
1516
1516
for (int i = 1; i <= 4; ++i) {
1517
1517
threads.emplace_back(f, i);
1518
1518
}
1519
1519
}
1520
1520
```
1521
1521
1522
- > [ 运行] ( https://godbolt.org/z/csor1bq8d ) 测试。
1522
+ > [ 运行] ( https://godbolt.org/z/T7WYeYGd1 ) 测试。
1523
1523
1524
- 初始线程有 4 个,线程 2 在执行了两轮同步之后便直接退出了 ,调用 ` arrive_and_drop ` 函数,下一个阶段的计数会重置为 ` 3 ` ,也就是只有三个活跃线程继续执行 。查看输出结果,非常的直观。
1524
+ 初始线程有 4 个,线程 2 在执行了 ** 三轮 ** 同步便直接退出了 ,调用 ` arrive_and_drop ` 函数,下一个阶段的计数会重置为 ` 3 ` ,也就是执行完第三轮同步后只有 ** 三个活跃线程 ** 继续执行 。查看输出结果,非常的直观。
1525
1525
1526
1526
这样,` arrive_and_drop ` 的作用就非常明显了,使用也十分的简单。
1527
1527
You can’t perform that action at this time.
0 commit comments