Ответ 1
notify_all, уведомленный о ожидающих потоках.
Барьер - это простое понятие. Также известный как рандеву, это точка синхронизации между несколькими потоками. Барьер настроен для определенного количества потоков (n) и как потоки дойти до барьера, он должен подождать, пока не появятся все нити. Как только n-й поток достиг барьера, все ожидающие потоки может продолжаться, а барьер reset.
Простой пример. значение тока будет выводиться только тогда, когда 3 потока вызовут функцию ожидания на барьер.
#include <boost/thread.hpp>
#include <boost/thread/barrier.hpp>
#include <boost/bind.hpp>
#include <boost/atomic.hpp>
boost::mutex io_mutex;
void thread_fun(boost::barrier& cur_barier, boost::atomic<int>& current)
{
++current;
cur_barier.wait();
boost::lock_guard<boost::mutex> locker(io_mutex);
std::cout << current << std::endl;
}
int main()
{
boost::barrier bar(3);
boost::atomic<int> current(0);
boost::thread thr1(boost::bind(&thread_fun, boost::ref(bar), boost::ref(current)));
boost::thread thr2(boost::bind(&thread_fun, boost::ref(bar), boost::ref(current)));
boost::thread thr3(boost::bind(&thread_fun, boost::ref(bar), boost::ref(current)));
thr1.join();
thr2.join();
thr3.join();
}