libco 下载 安装 运行 入门

下载安装

https://blog.csdn.net/greybtfly/article/details/83688420

入门

https://blog.csdn.net/arbboter/article/details/101375476

练习

/*
1、创建协程对象指针。
2、创建协程对象(协程对象指针地址,协程对象属性,协程函数,协程参数,)。
3、创建协程条件变量
4、启动协程
	stCoRoutine_t * produc =NULL;//声明一个对象类型指针。
	co_create(&produc,NULL,Producer,&p);
	int co_create(stCoRoutine_t**co,const stCoRoutineAttr_t *attr,void *(*routine)(void *),void *arg);
	/*
		四个参数:
		stCoRoutine_t:存储协程对象指针的地址,
		stCoRoutineAttr_t:协程对象的属性。
		routine:协程对象对应的函数。
		arg:协程函数的参数
	*/


*/

#include"co_routine.h"
#include<bits/stdc++.h>
using namespace std;
struct Pdata{
	stCoCont_t* cond;//条件变量
	vector<int> vecdata;//数据池
	int id;//数据id
	int cid;//协程id
}

void *Producer(void *arg){
	co_enable_hook_sys();//协程都要启用这个选项?
	Pdata *p=static_cast<Pdata*>arg;
	int cid = ++p->cid;
	while(1){
		for(int i=0;i<=2;i++){
			p->vecdata.push_back(++p->id);
			printf("生产者:%d 生产了数据 %d\n",cid,p->id);
		}
		co_cond_signal(p->cond);
		poll(NULL,0,1000);
	}
	return NULL;
}
void *consumer(void *arg){
	co_enable_hook_sys();//协程都要启用这个选项?
	Pdata *p=static_cast<Pdata*>arg;
	int cid = ++p->cid;
	while(1){
		if(p->vecdata.empty()){
			co_cond_timedwait(p->cond,-1);
			continue;
		}
		printf("消费者:%d 消费了数据 %d\n",cid,p->id);
		p->vecdata.erase(p->vecdata.begin());
	}
	return NULL;
}
int main(){
	Pdata p;
	p.cond = co_cond_alloc();
	stCoRoutine_t * pro =NULL;
	stCoRoutine_t * consu[2] ={NULL,NULL};
	co_create(&pro,NULL,Producer,&p);
	co_resume(pro);
	co_create(&consu[0],NULL,consumer,&p);
	co_resume(consu[0]);
	co_create(&consu[1],NULL,consumer,&p);
	co_resume(consu[1]);
	co_eventloop(co_get_epoll_ct(),NULL,NULL);
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值