
- C 标准库
- C 标准库
- C++ 标准库
- C++ 库 - 首页
- C++ 库 - <fstream>
- C++ 库 - <iomanip>
- C++ 库 - <ios>
- C++ 库 - <iosfwd>
- C++ 库 - <iostream>
- C++ 库 - <istream>
- C++ 库 - <ostream>
- C++ 库 - <sstream>
- C++ 库 - <streambuf>
- C++ 库 - <atomic>
- C++ 库 - <complex>
- C++ 库 - <exception>
- C++ 库 - <functional>
- C++ 库 - <limits>
- C++ 库 - <locale>
- C++ 库 - <memory>
- C++ 库 - <new>
- C++ 库 - <numeric>
- C++ 库 - <regex>
- C++ 库 - <stdexcept>
- C++ 库 - <string>
- C++ 库 - <thread>
- C++ 库 - <tuple>
- C++ 库 - <typeinfo>
- C++ 库 - <utility>
- C++ 库 - <valarray>
- C++ STL 库
- C++ 库 - <array>
- C++ 库 - <bitset>
- C++ 库 - <deque>
- C++ 库 - <forward_list>
- C++ 库 - <list>
- C++ 库 - <map>
- C++ 库 - <multimap>
- C++ 库 - <queue>
- C++ 库 - <priority_queue>
- C++ 库 - <set>
- C++ 库 - <stack>
- C++ 库 - <unordered_map>
- C++ 库 - <unordered_set>
- C++ 库 - <vector>
- C++ 库 - <algorithm>
- C++ 库 - <iterator>
- C++ 高级库
- C++ 库 - <any>
- C++ 库 - <barrier>
- C++ 库 - <bit>
- C++ 库 - <chrono>
- C++ 库 - <cinttypes>
- C++ 库 - <clocale>
- C++ 库 - <condition_variable>
- C++ 库 - <coroutine>
- C++ 库 - <cstdlib>
- C++ 库 - <cstring>
- C++ 库 - <cuchar>
- C++ 库 - <charconv>
- C++ 库 - <cfenv>
- C++ 库 - <cmath>
- C++ 库 - <ccomplex>
- C++ 库 - <expected>
- C++ 库 - <format>
- C++ 库 - <future>
- C++ 库 - <flat_set>
- C++ 库 - <flat_map>
- C++ 库 - <filesystem>
- C++ 库 - <generator>
- C++ 库 - <initializer_list>
- C++ 库 - <latch>
- C++ 库 - <memory_resource>
- C++ 库 - <mutex>
- C++ 库 - <mdspan>
- C++ 库 - <optional>
- C++ 库 - <print>
- C++ 库 - <ratio>
- C++ 库 - <scoped_allocator>
- C++ 库 - <semaphore>
- C++ 库 - <source_location>
- C++ 库 - <span>
- C++ 库 - <spanstream>
- C++ 库 - <stacktrace>
- C++ 库 - <stop_token>
- C++ 库 - <syncstream>
- C++ 库 - <system_error>
- C++ 库 - <string_view>
- C++ 库 - <stdatomic>
- C++ 库 - <variant>
- C++ STL 库速查表
- C++ STL - 速查表
C++ 库 - <barrier>
C++20 中的<barrier>有助于在并发编程中协调多个线程的执行。它使线程能够在共同点或屏障处相互等待,然后再继续执行。当所有线程到达屏障时,它们将被释放以执行其任务。
屏障对象初始化为特定数量的参与线程,称为完成阶段。当每个线程完成其任务并到达屏障时,它将调用 arrive_and_wait() 函数。
包含 <barrier> 头文件
要在您的 C++ 程序中包含 <barrier> 头文件,可以使用以下语法。
#include <barrier>
<barrier> 头文件的函数
以下是 <barrier> 头文件中所有函数的列表。
序号 | 函数及描述 |
---|---|
1 | arrive
到达屏障并减少预期计数。 |
2 | wait
在阶段同步点阻塞,直到其阶段完成步骤运行。 |
3 | arrive_and_wait
到达屏障并将预期计数减少 1,然后阻塞直到当前阶段完成。 |
4 | arrive_and_drop
将后续阶段的初始预期计数和当前阶段的预期计数都减少 1。 |
5 | max
返回实现支持的预期计数的最大值。 |
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
使用 arrive_and_wait()
在以下示例中,我们将为两个线程创建一个屏障,它们将在继续执行之前相互等待。
std:barrier 类是在 C++20 中引入的,因此要运行此代码,编译器必须支持 C++20。
#include <iostream> #include <barrier> #include <thread> void x(std::barrier < > & sync_point, int id) { std::cout << "Thread " << id << " has reached the barrier.\n"; sync_point.arrive_and_wait(); std::cout << "Thread " << id << " has crossed the barrier.\n"; } int main() { std::barrier sync_point(2); std::thread t1(x, std::ref(sync_point), 1); std::thread t2(x, std::ref(sync_point), 2); t1.join(); t2.join(); return 0; }
输出
以下是上述代码的输出:
Thread 2 has reached the barrier. Thread 1 has reached the barrier. Thread 1 has crossed the barrier. Thread 2 has crossed the barrier.
广告