c协程实现,C语言协程_1

  c协程实现,C语言协程

  C协程使用举例狙击手博客园

  C协程使用举例本篇使用上一篇提供的接口,实现一个简单的协程调度框架。

  基本思想是,创建一个调度器,用于将处于活动状态的协程调度运行,调度器维护着一个激活的列表,

  调用卵创建协程时,将新建立的协程添加到活动列表中。

  调用安排将启动调度器主循环。

  科罗

  # CORO国际机场

  #定义CORO_H

  #包含stdint.h

  #包含" uthread.h "

  结构缩阳症

  结构coro * next

  uthread _ t ut

  uint32 _ t id

  开始_乐趣st _乐趣

  uint32_t是_ end

  结构测试

  结构coro * sche

  结构coro *公司

  void* yield(struct coro*,struct coro*,void *);

  void* resume(struct coro*,struct coro*,void *);

  结构调度程序

  struct coro * active//处于激活态的缩阳症

  结构coro *自我

  结构调度程序* scheduler _ create();

  //生成一个缩阳症运行开始运行

  void spawn(struct scheduler*,void *stack,uint32_t stack_size,start _ fun);

  //调度缩阳症运行

  空的调度(结构调度程序*);

  #endifcoro.c

  #包含"科罗. h "

  #包含标准库

  #包含时间。h

  void* yield(struct coro *from,struct coro *to,void *arg)

  返回uthread_swtch(from- ut,to- ut,arg);

  void* resume(struct coro *from,struct coro *to,void *arg)

  返回uthread_swtch(from- ut,to- ut,arg);

  静态uint 32 _ t g _ index=0;

  静态void* coro_start_fun(void *arg)

  struct testarg * _ arg=(struct testarg *)arg;

  void * ret=_ arg-co-ST _ fun(_ arg);

  _ arg-co-is _ end=1;

  返回浸水使柔软

  虚空产卵(结构调度程序*sche,void *stack,uint32_t stack_size,start_fun st_fun)

  ut hread _ t ut=ut hread _ create(stack,stack _ size);

  struct coro * co=(struct coro *)malloc(sizeof(* co));

  co-ut=ut;

  co-ST _ fun=ST _ fun;

  co-id=g _ index;

  //添加到激活队列中

  co-next=sche-active;

  co-is _ end=0;

  sche-active=co;

  uthread_make(co- ut,sche- self- ut,coro _ start _ fun);

  结构调度程序*scheduler_create()

  struct scheduler * sche=(struct scheduler *)malloc(size of(* sche));

  sche-active=0;

  sche-self=(struct coro *)malloc(sizeof(* sche-self));

  sche- self- ut=uthread_create(0,0);

  返回血清胆碱酯酶

  无效计划(结构计划程序*计划)

  while(1)

  if(sche- active)

  struct coro * cur=sche-active;

  sche-active=0;

  while(cur)

  struct testarg arg={sche- self,cur };

  简历(sche- self,cur,arg);

  struct coro * tmp=cur-next;

  如果(!cur- is_end)

  cur-next=sche-active;

  sche-active=cur;

  当前=tmp

  其他

  ut hread _ destroy((cur-ut));

  免费(cur);

  当前=tmp

  其他

  打破;

  }测试。c

  #包含标准视频

  #包含标准库

  #包含stdint.h

  #包含" uthread.h "

  #包含"科罗. h "

  空*乐趣(空*参数)

  struct testarg * _ arg=(struct testarg *)arg;

  int I=0;

  while(i 10)

  printf(%d\n ,_ arg-co-id);

  yield(_arg- co,_arg- sche,0);

  我;

  返回0;

  int main()

  struct scheduler * sche=scheduler _ create();

  spawn(sche,malloc(4096),4096,fun);

  spawn(sche,malloc(4096),4096,fun);

  spawn(sche,malloc(4096),4096,fun);

  spawn(sche,malloc(4096),4096,fun);

  附表(sche);

  返回0;

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: