下载安装
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;
}