File tree Expand file tree Collapse file tree 1 file changed +6
-6
lines changed
Expand file tree Collapse file tree 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,
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
You can’t perform that action at this time.
0 commit comments