(Отказ от ответственности: я написал только несколько тестовых программ, которые используют волокна, чтобы убедиться, что они работают должным образом при работе под профилировщиком производительности, над которым я работал в то время.)
1) Как вы говорите, волокно не работает само по себе.Он запускается только тогда, когда другой поток явно переключается на него, вызывая SwitchToFiber
.Затем выполнение этого волокна продолжается до тех пор, пока оно не вызовет SwitchToFiber
и не переключится обратно на исходный поток или другое волокно.
2) Мне неясно, о чем вы здесь спрашиваете.Если волокно является единственным, вызывающим определенную функцию, оно может установить некоторую переменную или вызвать функцию, и вы будете знать, что она там была.Если несколько волокон вызывают одну и ту же функцию, возможно, они могли бы записать свой идентификатор потока, и вы сможете определить, какое волокно вызвало функцию.Какой здесь вариант использования?
3) Если оптоволокно работает, оно имеет доступ к своему стеку / регистрам обычным способом.Мне неизвестен способ произвольного доступа к стеку волокна, которое в данный момент не запланировано для выполнения в потоке, но я полагаю, что вы можете записать адрес стека из самого волокна.
Что бы это ни стоило, я не думаю, что поддержка оптоволокна в Windows API используется много.