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 main()14int main() { 15 using channel_t = boost::fibers::buffered_channel< std::string >; 16 try { 17 channel_t chan1{ 2 }, chan2{ 2 }; 18 19 boost::fibers::fiber fping([&chan1,&chan2]{ 20 chan1.push( "ping"); 21 std::cout << chan2.value_pop() << "\n"; 22 chan1.push( "ping"); 23 std::cout << chan2.value_pop() << "\n"; 24 chan1.push( "ping"); 25 std::cout << chan2.value_pop() << "\n"; 26 }); 27 boost::fibers::fiber fpong([&chan1,&chan2]{ 28 std::cout << chan1.value_pop() << "\n"; 29 chan2.push( "pong"); 30 std::cout << chan1.value_pop() << "\n"; 31 chan2.push( "pong"); 32 std::cout << chan1.value_pop() << "\n"; 33 chan2.push( "pong"); 34 }); 35 36 fping.join(); 37 fpong.join(); 38 39 std::cout << "done." << std::endl; 40 41 return EXIT_SUCCESS; 42 } 43 catch ( std::exception const& e) 44 { std::cerr << "exception: " << e.what() << std::endl; } 45 catch (...) 46 { std::cerr << "unhandled exception" << std::endl; } 47 return EXIT_FAILURE; 48 } 49