In multithreaded programming, there is an abstraction called barrier. It stops threads of execution that reach it until the requested number of threads are not blocked on it. After that, all the threads are released and they continue with their execution. Consider the following example of where it can be used.
We want to process different parts of data in different threads and then send the data:
#include <boost/array.hpp> #include <boost/thread/barrier.hpp> #include <boost/thread/thread.hpp> typedef boost::array<std::size_t, 10000> vector_type; typedef boost::array<vector_type, 4> data_t; void fill_data(vector_type& data); void compute_send_data(data_t& data); void runner(std::size_t thread_index, boost::barrier& barrier, data_t& data) { for (std::size_t i = 0; i < 1000; ++ i) { fill_data(data.at(thread_index)); barrier.wait(); if (!thread_index) { compute_send_data(data...