美文网首页
实现一个协程

实现一个协程

作者: lixin_karl | 来源:发表于2019-01-09 12:08 被阅读0次

一、头文件ucontext.h学习

  posix中ucontext.h头文件可以帮助我们实现用户级别的线程:
int getcontext(ucontext_t *ucp)
  将当前的上下文保存在ucp中。

int setcontext(const ucontext_t *ucp);
  设置当前的上下文为ucp,如果上下文是通过调用getcontext()取得,程序会执行getcontext()下面跟着的调用。如果上下文是通过调用makecontext取得,程序会调用makecontext函数的第二个参数指向的函数,如果func函数返回,则继续执行则恢复makecontext中context_t中指向的uc_link.如果uc_link为NULL,则线程退出。

void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);
  makecontext修改通过getcontext取得的上下文ucp(这意味着调用makecontext前必须先调用getcontext)。然后给该上下文指定一个栈空间ucp->stack,设置后继的上下文ucp->uc_link。

int swapcontext(ucontext_t *oucp, ucontext_t *ucp);
  保存当前上下文到oucp结构体中,然后激活ucp上下文。如果执行成功,getcontext返回0,setcontext和swapcontext不返回;如果执行失败,getcontext,setcontext,swapcontext返回-1,并设置对于的errno。

#include<iostream>
#include<unistd.h>
#include<ucontext.h>

int main()
{
     ucontext_t context;
     getcontext(&context);
     sleep(1);
     std::cout<<"循环"<<std::endl;
     setcontext(&context);
     return 0;
}

参考

https://blog.csdn.net/qq910894904/article/details/41911175

相关文章

  • 协程技术

    1、协程(Coroutine):比线程的单位更小,在一个线程中可以开启多个协程,利用多个协程实现并发。 2、协程跟...

  • 实现一个协程

    一、头文件ucontext.h学习   posix中ucontext.h头文件可以帮助我们实现用户级别的线程:in...

  • Unity协程基础用法

    //通过StartCoroutine()开始一个协程 //通过StopCoroutine();关闭一个协程 ...

  • 一学就会的协程使用——基础篇(一)协程启动

    1. 启动一个协程 来,来启动第一个协程吧: 就这么简单,就可以在任意一个地方启动一个协程,而且这个协程必然会执行...

  • Kotlin 协程基本概念

    目录1、什么是 Kotlin 协程2、场景举例3、如何使用 Kotlin 协程4、实现第一个协程5、Corouti...

  • 通道--golang

    通道(channels) 是连接多个协程的管道,可以从一个协程将值发送到通道,然后在另一个协程中接收,由关键字ch...

  • Go协程介绍

    参考自《go专家编程》Go协程所实现的是M:N的线程模型,M个协程运行在N个线程中。 1. MPG模型 Go协程中...

  • 用多个协程顺序打印1-100

    这个题目要求有10个协程,每个协程打印0-9作为后缀的数字,总共打印100个

  • 二十六:Python之协程

    协程:比线程更小的执行单元(微线程) 一个线程作为一个容器,里面可以放置多个协程,只切换函数调用即可实现多任务,可...

  • 【golang 学习总结1】轻松开启100个并发

    代码 代码解释: 使用go 开启一个协程,一共开启了100个协程 为什么使用 time.Sleep因为 main函...

网友评论

      本文标题:实现一个协程

      本文链接:https://www.haomeiwen.com/subject/byiwrqtx.html