什么是boost:barrier,如何使用这种boost方法.可以给我一个明确的例子,因为我发现了以下几个例子:
bool wait() { boost::mutex::scoped_lock lock(m_mutex); unsigned int gen = m_generation; if (--m_count == 0) { m_generation++; m_count = m_threshold; m_cond.notify_all(); return true; } while (gen == m_generation) m_cond.wait(lock); return false; }
解决方法
notify_all,通知等待线程.
A barrier is a simple concept. Also known as a rendezvous,it is a
synchronization point between multiple threads. The barrier is
configured for a particular number of threads (n),and as threads
reach the barrier they must wait until all n threads have arrived.
Once the n-th thread has reached the barrier,all the waiting threads
can proceed,and the barrier is 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(current))); boost::thread thr3(boost::bind(&thread_fun,boost::ref(current))); thr1.join(); thr2.join(); thr3.join(); }