【 在 MyWorkLife 的大作中提到: 】
: 从c++20的角度来说不存在“协程恢复线程不确定”的问题
应该说是c++20没有规定“挂起和恢复协程的必须为同一个线程”这样可以实现一些线程池比如:
cppcoro::static_thread_pool
: 这种情况出现的原因是在suspend以后显式地跨线程转移了协程的handle
: 这是技术设计上的选择,作为开发人员必然是非常清楚的
这个要求太高了,如果开发人员都非常清楚自己写啥,这个世界就没有了bug。
production code中有很多这种函数,比如这种通过tls,把以前的不安全的code变成线程安全的。
const char *map_str(const char *from)
{
thread_local to[1024];
if(from){
expensive_map_call(from, to);
}
return to;
}
然后,如果协程上下文调用了这个map_str()函数,那么就implicitly的refer了这个tls。
而协程使用者和map_str()的作者可能根本不是同一个人,这会给协程使用者一个大surprise。
: ...................
--
FROM 158.140.1.*