纖程
就像
跟線
Windows纤程
[编辑]一个用户态线程拆分成多个纤程,
- PVOID ConvertThreadToFiber(PVOID pvParam); //
把 当 前 线程转换为纤程 ,系 统为纤程执行环境分配 大概 200字 节的存 储空间,包括 :1、由 参 数 pvParam参 数 指定 的 用 户定义的值,2、结构化 异常处理链头。3、纤程的 运行栈的最高 和 最低 地 址 。4、各 种CPU寄 存 器 信 息 。 - PVOID ConvertThreadToFiberEx(PVOID pvParam,DWORD dwFlags);//
默 认情况下,x86系 统的CPU的 浮点数 状 态信息 在 纤程看 来 不 属 于CPU寄 存 器 ,因 此会导致在 纤程中 执行一些相关的浮点运算会破坏数据。为了克服 这一问题,调用本 函数 并且传递FIBER_FLAG_FLOAT_SWITCH给它的 第 2个参数 dwFlags - PVOID CreateFiber(DWORD dwStackSize,PFIBER_START_ROUTINE pfnStartAddress,PVOID pvParam); //
在 同 一个线程中再创建一个纤程 - PVOID CreateFiberEx(SIZE_T dwStackCommitSize,SIZE_T dwStackReserveSize,DWORD dwFlags, PFIBER_START_ROUTINE pStartAddress, PVOID pvParam); // 一个线程包含多个纤程
- VOID WINAPI FiberFunc(PVOID pvParam);//纤程
函数 的 规格 - VOID SwitchToFiber(PVOID pvFiberExecutionContext);//调度纤程
的 执行。参 数 是 ConverThreadToFiber(Ex)或 CreateFiber(Ex)返 回 值。 - VOID DeleteFiber(PVOID pvFiberExecutionContext);//纤程
完成 了 任 务,删除它. 该函数 首 先 清 除 纤程运行栈,然 后 删除纤程执行环境。一般是由一个纤程调用来删除另一个纤程。 - ConvertFiberToThread //
当 所有 纤程结束了 运行,需要 从纤程 转换为线程 - IsThreadAFiber //
是 否 正 在 一个纤程执行环境中运行 - PVOID GetCurrentFiber();//
正 在 执行的 纤程的 执行环境 - PVOID GetFiberData();//
用 户定义的一 个数据 ,这个数 据 由 CreateFiber(Ex)或 ConvertThreadToFiber(Ex)的 pvParam参 数 指定 - 纤程
局部 存 储(FLS)机 制 。这个机 制 和 “线程局部 存 储”(TLS)类似- FlsAlloc
函数 分配 FLS槽 来 存 放 数 据 ,这个FLS槽 可 以被当 前 进程内 所有 纤程共同 使用 - FlsSetValue
函数 来 保存 数 据 到 FLS槽 中 - FlsGetValue
函数 来 取得 FLS槽 中 对应的 数 据 - FlsFree
来 释放FLS槽
- FlsAlloc