]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/fiber/examples/barrier.cpp
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)
12 #include <boost/assert.hpp>
14 #include <boost/fiber/all.hpp>
20 void fn1( boost::fibers::barrier
& b
)
22 boost::fibers::fiber::id id
= boost::this_fiber::get_id();
23 std::cout
<< "fiber " << id
<< ": fn1 entered" << std::endl
;
26 std::cout
<< "fiber " << id
<< ": incremented value1: " << value1
<< std::endl
;
27 boost::this_fiber::yield();
29 std::cout
<< "fiber " << id
<< ": waits for barrier" << std::endl
;
31 std::cout
<< "fiber " << id
<< ": passed barrier" << std::endl
;
34 std::cout
<< "fiber " << id
<< ": incremented value1: " << value1
<< std::endl
;
35 boost::this_fiber::yield();
38 std::cout
<< "fiber " << id
<< ": incremented value1: " << value1
<< std::endl
;
39 boost::this_fiber::yield();
42 std::cout
<< "fiber " << id
<< ": incremented value1: " << value1
<< std::endl
;
43 boost::this_fiber::yield();
45 std::cout
<< "fiber " << id
<< ": fn1 returns" << std::endl
;
49 void fn2( boost::fibers::barrier
& b
)
51 boost::fibers::fiber::id id
= boost::this_fiber::get_id();
52 std::cout
<< "fiber " << id
<< ": fn2 entered" << std::endl
;
55 std::cout
<< "fiber " << id
<< ": incremented value2: " << value2
<< std::endl
;
56 boost::this_fiber::yield();
59 std::cout
<< "fiber " << id
<< ": incremented value2: " << value2
<< std::endl
;
60 boost::this_fiber::yield();
63 std::cout
<< "fiber " << id
<< ": incremented value2: " << value2
<< std::endl
;
64 boost::this_fiber::yield();
66 std::cout
<< "fiber " << id
<< ": waits for barrier" << std::endl
;
68 std::cout
<< "fiber " << id
<< ": passed barrier" << std::endl
;
71 std::cout
<< "fiber " << id
<< ": incremented value2: " << value2
<< std::endl
;
72 boost::this_fiber::yield();
74 std::cout
<< "fiber " << id
<< ": fn2 returns" << std::endl
;
81 boost::fibers::barrier
fb( 2);
83 boost::fibers::fiber
f1( & fn1
, std::ref( fb
) );
84 boost::fibers::fiber
f2( & fn2
, std::ref( fb
) );
89 std::cout
<< "done." << std::endl
;
93 catch ( std::exception
const& e
)
94 { std::cerr
<< "exception: " << e
.what() << std::endl
; }
96 { std::cerr
<< "unhandled exception" << std::endl
; }