FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

GitHub Viewer

// Copyright (C) 2001-2003 // William E. Kempf // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include namespace { const int ITERS = 100; boost::mutex io_mutex; } // namespace template class buffer_t { public: typedef boost::unique_lock scoped_lock; buffer_t(int n) : p(0), c(0), full(0), buf(n) { } void send(int m) { scoped_lock lk(mutex); while (full == buf.size()) cond.wait(lk); buf[p] = m; p = (p+1) % buf.size(); ++full; cond.notify_one(); } int receive() { scoped_lock lk(mutex); while (full == 0) cond.wait(lk); int i = buf[c]; c = (c+1) % buf.size(); --full; cond.notify_one(); return i; } static buffer_t& get_buffer() { static buffer_t buf(2); return buf; } static void do_sender_thread() { for (int n = 0; n < ITERS; ++n) { { boost::unique_lock lock(io_mutex); std::cout

Back | FazBrowse Home | New Git URL