]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/fiber/examples/barrier.cpp
e77c90c1a0e59b5e5832efe8edccf4c9f06880bb
6 #include <boost/assert.hpp>
8 #include <boost/fiber/all.hpp>
14 void fn1( boost::fibers::barrier
& b
)
16 boost::fibers::fiber::id id
= boost::this_fiber::get_id();
17 std::cout
<< "fiber " << id
<< ": fn1 entered" << std::endl
;
20 std::cout
<< "fiber " << id
<< ": incremented value1: " << value1
<< std::endl
;
21 boost::this_fiber::yield();
23 std::cout
<< "fiber " << id
<< ": waits for barrier" << std::endl
;
25 std::cout
<< "fiber " << id
<< ": passed barrier" << std::endl
;
28 std::cout
<< "fiber " << id
<< ": incremented value1: " << value1
<< std::endl
;
29 boost::this_fiber::yield();
32 std::cout
<< "fiber " << id
<< ": incremented value1: " << value1
<< std::endl
;
33 boost::this_fiber::yield();
36 std::cout
<< "fiber " << id
<< ": incremented value1: " << value1
<< std::endl
;
37 boost::this_fiber::yield();
39 std::cout
<< "fiber " << id
<< ": fn1 returns" << std::endl
;
43 void fn2( boost::fibers::barrier
& b
)
45 boost::fibers::fiber::id id
= boost::this_fiber::get_id();
46 std::cout
<< "fiber " << id
<< ": fn2 entered" << std::endl
;
49 std::cout
<< "fiber " << id
<< ": incremented value2: " << value2
<< std::endl
;
50 boost::this_fiber::yield();
53 std::cout
<< "fiber " << id
<< ": incremented value2: " << value2
<< std::endl
;
54 boost::this_fiber::yield();
57 std::cout
<< "fiber " << id
<< ": incremented value2: " << value2
<< std::endl
;
58 boost::this_fiber::yield();
60 std::cout
<< "fiber " << id
<< ": waits for barrier" << std::endl
;
62 std::cout
<< "fiber " << id
<< ": passed barrier" << std::endl
;
65 std::cout
<< "fiber " << id
<< ": incremented value2: " << value2
<< std::endl
;
66 boost::this_fiber::yield();
68 std::cout
<< "fiber " << id
<< ": fn2 returns" << std::endl
;
75 boost::fibers::barrier
fb( 2);
77 boost::fibers::fiber
f1( & fn1
, std::ref( fb
) );
78 boost::fibers::fiber
f2( & fn2
, std::ref( fb
) );
83 std::cout
<< "done." << std::endl
;
87 catch ( std::exception
const& e
)
88 { std::cerr
<< "exception: " << e
.what() << std::endl
; }
90 { std::cerr
<< "unhandled exception" << std::endl
; }