X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fboost%2Flibs%2Ffiber%2Fexamples%2Fping_pong.cpp;h=aa56a411bed6a183197bd340bfba709e0a26acbc;hb=b32b81446b3b05102be0267e79203f59329c1d97;hp=4ab22bd6c80d4ccef9a64d8994093bbdde3c7d30;hpb=215dd7151453fae88e6f968c975b6ce309d42dcf;p=ceph.git diff --git a/ceph/src/boost/libs/fiber/examples/ping_pong.cpp b/ceph/src/boost/libs/fiber/examples/ping_pong.cpp index 4ab22bd6c..aa56a411b 100644 --- a/ceph/src/boost/libs/fiber/examples/ping_pong.cpp +++ b/ceph/src/boost/libs/fiber/examples/ping_pong.cpp @@ -1,79 +1,40 @@ + +// Copyright Oliver Kowalke 2013. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + #include #include +#include #include -#include -#include -#include -#include - #include -typedef boost::fibers::unbounded_channel< std::string > fifo_t; - -inline -void ping( fifo_t & recv_buf, fifo_t & send_buf) -{ - boost::fibers::fiber::id id( boost::this_fiber::get_id() ); - - send_buf.push( std::string("ping") ); - - std::string value = recv_buf.value_pop(); - std::cout << "fiber " << id << ": ping received: " << value << std::endl; - value.clear(); - - send_buf.push( std::string("ping") ); - - value = recv_buf.value_pop(); - std::cout << "fiber " << id << ": ping received: " << value << std::endl; - value.clear(); - - send_buf.push( std::string("ping") ); - - value = recv_buf.value_pop(); - std::cout << "fiber " << id << ": ping received: " << value << std::endl; - - send_buf.close(); -} - -inline -void pong( fifo_t & recv_buf, fifo_t & send_buf) -{ - boost::fibers::fiber::id id( boost::this_fiber::get_id() ); - - std::string value = recv_buf.value_pop(); - std::cout << "fiber " << id << ": pong received: " << value << std::endl; - value.clear(); - - send_buf.push( std::string("pong") ); - - value = recv_buf.value_pop(); - std::cout << "fiber " << id << ": pong received: " << value << std::endl; - value.clear(); - - send_buf.push( std::string("pong") ); - - value = recv_buf.value_pop(); - std::cout << "fiber " << id << ": pong received: " << value << std::endl; - - send_buf.push( std::string("pong") ); - - send_buf.close(); -} - -int main() -{ - try - { - { - fifo_t buf1, buf2; - - boost::fibers::fiber f1( & ping, boost::ref( buf1), boost::ref( buf2) ); - boost::fibers::fiber f2( & pong, boost::ref( buf2), boost::ref( buf1) ); - - f1.join(); - f2.join(); - } +int main() { + using channel_t = boost::fibers::buffered_channel< std::string >; + try { + channel_t chan1{ 2 }, chan2{ 2 }; + + boost::fibers::fiber fping([&chan1,&chan2]{ + chan1.push( "ping"); + std::cout << chan2.value_pop() << "\n"; + chan1.push( "ping"); + std::cout << chan2.value_pop() << "\n"; + chan1.push( "ping"); + std::cout << chan2.value_pop() << "\n"; + }); + boost::fibers::fiber fpong([&chan1,&chan2]{ + std::cout << chan1.value_pop() << "\n"; + chan2.push( "pong"); + std::cout << chan1.value_pop() << "\n"; + chan2.push( "pong"); + std::cout << chan1.value_pop() << "\n"; + chan2.push( "pong"); + }); + + fping.join(); + fpong.join(); std::cout << "done." << std::endl;