C++ barrier::wait() Function



The std::barrier::wait() function in C++, is a synchronization mechanism introduced in C++20 that pauses a thread until the required number of threads reach the barrier.

A barrier holds a fixed number of threads, allowing each thread to perform work until they reach a common point. once all the threads have reached this point, the barrier is released and each thread continues execution.

Syntax

Following is the syntax for std::barrier::wait() function.

void wait( arrival_token&& arrival ) const;

Parameters

  • arrival − It indicates an arrival_token obtained by a previous call to arrive on the same barrier.

Return value

This function does not returns anything.

Exception

It throws std::system_error with an error code allowed for mutex types on error.

Example 1

In the following example, we are going to consider the basic usage of the wait() function.

#include <iostream>
#include <thread>
#include <barrier>
void a(std::barrier < > & y, int b) {
   std::cout << "Thread working.\n";
   std::this_thread::sleep_for(std::chrono::milliseconds(100 * b));
   std::cout << "Thread reached barrier.\n";
   y.arrive_and_wait();
   std::cout << "Thread passed the barrier.\n";
}
int main() {
   std::barrier y(1);
   std::thread x1(a, std::ref(y), 1);
   x1.join();
   return 0;
}

Output

Output of the above code is as follows −

Thread working.
Thread reached barrier.
Thread passed the barrier.
cpp_barrier.htm
Advertisements