当两个不同的线程将SwitchToFiber切换到同一根光纤时会发生什么?

时间:2018-11-26 18:59:41

标签: winapi

当两个不同的线程使用相同的光纤地址同时调用SwitchToFiber()时会发生什么?

void Thread1() { SwitchToFiber(fiberA); }
void Thread2() { SwitchToFiber(fiberA); }

这是非法的吗?

1 个答案:

答案 0 :(得分:1)

documentation明确指出:

  

SwitchToFiber功能可保存当前光纤的状态信息并恢复指定光纤的状态。 您可以使用由其他线程创建的光纤地址呼叫SwitchToFiber 。为此,您必须在调用该线程CreateFiber时将地址返回给另一个线程,并且必须使用正确的同步

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