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; }
在上面的代码中:m_cond.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();}总结
以上是内存溢出为你收集整理的c – 如何使用增压屏障全部内容,希望文章能够帮你解决c – 如何使用增压屏障所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)