Winapi 当两个不同的线程切换到同一光纤时会发生什么情况?

Winapi 当两个不同的线程切换到同一光纤时会发生什么情况?,winapi,Winapi,当两个不同的线程同时使用相同的光纤地址调用SwitchToFiber()进行切换时会发生什么情况 void Thread1() { SwitchToFiber(fiberA); } void Thread2() { SwitchToFiber(fiberA); } 这是违法的吗?法律明确规定: SwitchToFiber功能保存当前光纤的状态信息,并恢复指定光纤的状态您可以使用不同线程创建的光纤地址调用SwitchToFiber。要做到这一点,必须在调用另一个线程时将地址返回到该线程,Crea

当两个不同的线程同时使用相同的光纤地址调用SwitchToFiber()进行切换时会发生什么情况

void Thread1() { SwitchToFiber(fiberA); }
void Thread2() { SwitchToFiber(fiberA); }
这是违法的吗?

法律明确规定:

SwitchToFiber
功能保存当前光纤的状态信息,并恢复指定光纤的状态您可以使用不同线程创建的光纤地址调用
SwitchToFiber
。要做到这一点,必须在调用另一个线程时将地址返回到该线程,
CreateFiber
,并且必须使用正确的同步


如果不同步线程以序列化跨线程边界的光纤切换,则会遇到未定义的行为区域,因此任何情况都可能发生。

崩溃。这是堆栈。如果两个线程将使用相同的堆栈-崩溃。这是错误的和非法的。这似乎是一个正确的共识解释,它的基本行为必须是盲目地切换堆栈,但我认为这里的文档并没有那么清楚。因为继续为其中一个线程运行现有光纤可以被视为可行的实现。