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;
}


上一篇:python爬虫练习4——腾讯视频评论提取


下一篇:MyBatis的多表查询笔记