协程

  1. 2022-05-07 内容
  2. 2023-3-22 游戏中的协程

2022-05-07 内容

https://bbs.huaweicloud.com/blogs/266537?utm_source=segmentfault&utm_medium=bbs-ex&utm_campaign=other&utm_content=content

协程被抽象为了std::coroutine_handle<promise_type>对象

对于单线程来说,协程可以通过co_yield提前返回,resume恢复运行,将一个长操作打散为多个短操作

2023-3-22 游戏中的协程

协程在游戏这种帧驱动中存在以下问题。

在第一帧的时候,Get了一个指针,在本帧的时候是保证能用的。之后yield再恢复可能已经第三帧了,第一帧获取的指针可能到了第三帧就垂悬了

例子如下

处理客户端RPC请求时在第一帧,这时通过RoleId获取了指向玩家数据A的指针,之后yield。

第二帧玩家下线,玩家数据A被删除

第三帧从yield恢复,这时指向玩家数据A的指针就是垂悬指针。

所以需要在使用协程后,将上文的所有指针、引用等可能失效的都重新获取。