首先,您必须将线转换为纤维。
这是您在商店应用程序中无法做到的,这是一个很好的先有鸡还是先有蛋的问题。这是 SDK 文档所说的,但实际上并不是 Microsoft CRT 所做的,它使用 FlsAlloc() 但从不在任何地方调用 ConvertThreadToFiber/Ex()。所以你没关系,只是永远不要调用 CreateFiber()。
是的,如果您不根据 SDK创建光纤,则 FLS 与 TLS 相同:
光纤可以使用光纤本地存储 (FLS) 为每条光纤创建一个变量的唯一副本。如果没有发生光纤切换,FLS 的作用与线程本地存储完全相同。FLS 函数(FlsAlloc、FlsFree、FlsGetValue 和 FlsSetValue)操作与当前线程关联的 FLS。如果线程正在执行一个纤程并且切换纤程,则FLS也被切换。
还可以看到在CRT中使用,看看VS2012+的vc/crt/src/Platform.cpp源代码文件,__TlsAlloc()函数。当 _CRT_APP 为#defined 时,您会看到它回退到 FlsAlloc。它适用于 VCLibs 构建,即在 Store 应用程序中使用的构建。
没有明确记录,但非常有力的证据表明这很好。