1 2 // Copyright Oliver Kowalke 2013. 3 // Distributed under the Boost Software License, Version 1.0. 4 // (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 #include <cstdlib> 8 #include <iostream> 9 #include <stdexcept> 10 #include <string> 11 12 #include <boost/fiber/all.hpp> 13 14 typedef boost::fibers::unbuffered_channel< unsigned int > channel_t; 15 foo(channel_t & chan)16void foo( channel_t & chan) { 17 chan.push( 1); 18 chan.push( 1); 19 chan.push( 2); 20 chan.push( 3); 21 chan.push( 5); 22 chan.push( 8); 23 chan.push( 12); 24 chan.close(); 25 } 26 bar(channel_t & chan)27void bar( channel_t & chan) { 28 for ( unsigned int value : chan) { 29 std::cout << value << " "; 30 } 31 std::cout << std::endl; 32 } 33 main()34int main() { 35 try { 36 channel_t chan; 37 38 boost::fibers::fiber f1( & foo, std::ref( chan) ); 39 boost::fibers::fiber f2( & bar, std::ref( chan) ); 40 41 f1.join(); 42 f2.join(); 43 44 std::cout << "done." << std::endl; 45 46 return EXIT_SUCCESS; 47 } catch ( std::exception const& e) { 48 std::cerr << "exception: " << e.what() << std::endl; 49 } catch (...) { 50 std::cerr << "unhandled exception" << std::endl; 51 } 52 return EXIT_FAILURE; 53 } 54