C++20新特性-barrier
以下内容由 豆包 大语言模型生成,内容仅供参考:
C++20 引入了一个新的标准库头文件 <barrier>
,其中包含了对屏障(barrier)的支持。屏障是一种用于同步多个线程的同步原语,它允许线程在某个点上等待,直到所有线程都到达该点。
C++ 中的 `std::barrier` 是一个同步原语,用于协调多个线程之间的同步操作。它提供了两个主要的函数:`arrive()` 和 `wait()`。
下面是一个使用 `std::barrier` 的简单例子:
#include <iostream> #include <barrier> #include <thread> // 任务函数 void task(int threadId) { std::cout << "Thread " << threadId << " 正在执行任务...\n"; // 到达屏障 std::barrier::arrive(); std::cout << "Thread " << threadId << " 完成任务并等待其他线程...\n"; // 等待其他线程到达屏障 std::barrier::wait(); std::cout << "Thread " << threadId << " 继续执行其他任务...\n"; } int main() { // 创建一个有 3 个线程的屏障 std::barrier barrier(3); std::thread threads[3]; // 创建并启动 3 个线程 for (int i = 0; i < 3; ++i) { threads[i] = std::thread(task, i); } // 等待所有线程完成 for (int i = 0; i < 3; ++i) { threads[i].join(); } return 0; }
在这个例子中,我们创建了一个包含 3 个线程的屏障。每个线程在执行任务之前,先调用 `arrive()` 函数到达屏障,然后执行任务。当所有线程都到达屏障后,它们会调用 `wait()` 函数等待其他线程。当所有线程都完成任务并等待其他线程时,屏障被打破,所有线程继续执行其他任务。
这个例子简单地演示了屏障的基本功能和语法。在实际应用中,你可以根据需要在屏障上执行更复杂的同步操作。