• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)16 void 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)27 void bar( channel_t & chan) {
28     for ( unsigned int value : chan) {
29         std::cout << value << " ";
30     }
31     std::cout << std::endl;
32 }
33 
main()34 int 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