У меня есть вопрос о волокне в окнах - PullRequest
0 голосов
/ 06 января 2019

Я хочу знать о волокне, которое предоставляет окно.

Давайте предположим, что я создал 4 волокна.

------------ нить -----------------

волокно1 - волокно2 - волокно3 - волокно4

^

Волокно 1 теперь выполняется потоком.

  1. Один поток может работать только с одним волокном одновременно. Это правильно?

  2. Если нить оканчивает волоконно-оптический кабель1, то по другому все волокна также прерываются?

  3. Я знаю, что волокно не является вытесняющим. Тогда, если я захочу переключить fiber1 на fiber2, нет способа, кроме как вызвать SwitchToFiber в fiber1?

  4. Если я вызову SwitchToFiber в fiber1 во время выполнения какой-либо задачи, то fiber1 немедленно перестанет спать? или спать после выполнения своей задачи?

  5. Нет общего пространства в fiber1 to fiber4?

  6. И нет общего пространства, тогда нет необходимости блокировать оптоволокно. это правильно?

Я читаю документы MSDN, но не могу что-то понять. Поэтому я спрашиваю здесь.

1 Ответ

0 голосов
/ 06 января 2019

SwitchToFiber похоже на longjmp, а CreateFiber похоже на расширенную версию setjmp, которая выделяет дополнительное пространство стека. DeleteFiber похоже на free блока контекста, выделенного setjmp. И самое главное, дающие ничего не делают сами по себе, и longjmp похож на расширенную версию C goto, например. похож на расширение «computed goto» в gcc, за исключением того, что он может переключать стек при прыжке. Вы можете легко эмулировать волокна (не переносимые) с setjmp, longjmp и некоторыми alloca.

...