Многозадачность с помощью setjmp, longjmp

есть ли способ реализовать многозадачное использование setjmp и longjmp функции

17
задан osgx 30 March 2011 в 01:05
поделиться

1 ответ

Это может немного изменить правила, но GNU pth делает это. Это возможно, но вам, вероятно, не стоит пробовать это самостоятельно, кроме как в качестве академического упражнения по проверке концепции, используйте реализацию pth, если вы хотите делать это серьезно и удаленно переносимым способом - вы поймете, почему, когда прочтете код создания p-го потока.

(По сути, он использует обработчик сигналов, чтобы обманом заставить ОС создать новый стек, а затем удалить longjmp и сохранить стек. Очевидно, он работает, но чертовски отрывочен.)

В производственном коде, если ваша ОС поддерживает makecontext / swapcontext, используйте их. Если он поддерживает CreateFiber / SwitchToFiber, используйте их. И помните о неутешительной истине, что одно из наиболее убедительных способов использования сопрограмм - то есть инвертирование управления путем выдачи обработчиков событий, вызываемых внешним кодом, - небезопасно, потому что вызывающий модуль должен быть реентерабельным, и вы, как правило, можете Не могу это доказать. Вот почему волокна по-прежнему не поддерживаются в .NET ...

8
ответ дан 30 November 2019 в 13:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: