Что происходит, когда два разных потока одновременно вызывают SwitchToFiber (), используя одни и те же оптоволоконные адреса для переключения на?
void Thread1() { SwitchToFiber(fiberA); } void Thread2() { SwitchToFiber(fiberA); }
Это недопустимо?
Документация четко гласит:
Функция SwitchToFiber сохраняет информацию о состоянии текущего волокна и восстанавливает состояние указанного волокна. Вы можете позвонить SwitchToFiber с адресом волокна, созданного другим потоком .Для этого вам необходимо вернуть адрес другому потоку, когда он вызвал CreateFiber и , вы должны использовать правильную синхронизацию .
SwitchToFiber
CreateFiber
Если вы не синхронизируете свои потокичтобы сериализовать переключение волокон через границы потоков, вы сталкиваетесь с неопределенным поведением территорией, поэтому может произойти что угодно .