C++使用Boost.coroutine库实现协程

//coroutine_example1.cpp
#include 
#include 


void foo(boost::coroutines2::asymmetric_coroutine<void>::push_type & father)
{
	std::cout << "1";
	father();
	std::cout << "2";
	father();
	std::cout << "3";
	father();
	std::cout << "4";
}

int main(int argc, char * argv[])
{
	{
		boost::coroutines2::asymmetric_coroutine<void>::pull_type sub(foo);
		while (sub)
		{
			std::cout << "-";
			sub();
		}
	}

	std::cout << "\nDone" << std::endl;

	return 0;
}
//coroutine_example2.cpp

#include 
#include 

void foo(boost::coroutines2::asymmetric_coroutine<int>::push_type &boyfriend)
{
	boyfriend(1);
	boyfriend(2);
	boyfriend(3);
	boyfriend(4);
}

int main(int argc, char *argv[])
{
	boost::coroutines2::asymmetric_coroutine<int>::pull_type girlfriend(foo);
	while (girlfriend)
	{
		int ret = girlfriend.get();
		std::cout << ret << "-";
		girlfriend();
	}

	std::cout << "\nDone" << std::endl;

	return 0;
}

//coroutine_example3.cpp
#include 
#include 

void foo(boost::coroutines2::asymmetric_coroutine<int>::pull_type &girlfriend)
{
	std::cout << girlfriend.get();
	girlfriend();
	std::cout << girlfriend.get();
	girlfriend();
	std::cout << girlfriend.get();
	girlfriend();
	std::cout << girlfriend.get();
}

int main(int argc, char *argv)
{
	boost::coroutines2::asymmetric_coroutine<int>::push_type boyfriend(foo);
	int i = 1;
	while (boyfriend)
	{
		boyfriend(i);
		i++;
		std::cout << "-";
	}
	return 0;
}

//coroutine_example4.cpp
#include 
#include 

int main()
{
	boost::coroutines2::asymmetric_coroutine<int>::push_type boyfriend(
		[](boost::coroutines2::asymmetric_coroutine<int>::pull_type &girlfriend) 
	{
		for (auto i : girlfriend)
		{
			std::cout << i;
		}
	});

	for (int i = 1; i <= 4; i++)
	{
		boyfriend(i);
		std::cout << "-";
	}

	return 0;
}

你可能感兴趣的:(Boost)