windows下的协程

本文详细介绍了Windows环境下协程Fiber的使用方法,包括创建、转换、切换协程的API,以及如何获取协程的执行地址和参数指针。通过实例演示了如何在用户态下精确控制并行逻辑的执行,提供了便于理解和记忆的协程概念解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

协程coroutine的作用主要是 在用户管理并行逻辑间的切换, 不像线程thread那样, 交由系统控制运行下 需要 锁 唤醒 条件栅栏 类似这些的同步方式组织协作。  协程可以让用户精确控制在某个时刻下运行那块逻辑, 因为相关联的协程都在一个thread里运行, 所以不需要考虑资源互斥的那些东西,  同时协程在用户态下保留了各个寄存器,栈顶和栈底,异常信息,浮点寄存器 这种上下文信息, 让代码写起来更自然

一直以为协程是脚本语言的特性, 最近碰巧看到原来windows下很早就支持协程的操作了, 只是另取了个名字 纤程 Fiber 。这点不得不佩服微软的工程师门, 好端端的又整一个概念出来, 想想之前的NMAKE. 微软总要把一些成熟的东西贴上自己的标签。 为了方便记忆我还是爱用协程这个名字。


协程用起来比较简单,api也就那几个

CreateFiber 创建一个协程 ,需要传入堆栈大小,运行入口,参数指针 ,返回一个协程的执行地址 ,用来 switch用

ConvertThreadToFiber 把当前线程转换成一个协程, 只需要传入一个参数指针,  因为运行入口是执行完ConvertThreadToFiber后的下一段代码 堆栈也为线程的堆栈, 同样返回一个协程的执行地址。 这个调用主要用于主控的协程, 等同于多线程下的 main 线程,  mainfiber 可以这么理解

SwitchToFiber 主动切换协程,等于 yield 和 resume的合体, 只是没那么自然也不能传递参数, 需要参数指定 协程的执行地址, 就是上面2个接口返回的那个值

GetCurrentFiber 取得当前执行协程的 执行地址, 主要作用可能是给某些公用接口来区分协程类型来实现不同逻辑

GetFiberData 取得当前协程在创建时传入的参数指针, 这个指针一般在ConvertThreadToFiber调用前 alloc好, mainfiber可以直接访问,而其他的协程必须通过入口参数取得,公用函数则用GetFiberData取 

FiberProc 为协程方法的函数指针类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值