Я хочу реализовать POSIX-совместимые микропотоки в среде Linux. Основная идея заключается в следующем:
- Используя описанную технику здесь , назначьте новое место в стеке для каждого волокна.
- Используя setitimer, создайте таймер, который будет отправлять сигналы с постоянным интервалом времени. Обработчик сигнала для этого таймера будет действовать как планировщик и переключаться между волокнами.
Проблема в том, что выполнение longjmp в обработчике сигналов не завершит работу обработчика, поэтому ядро будет ждать его завершения вместо доставки новых сигналов. Это делает невозможным переключение контекста, потому что нет никаких сигналов для запуска переключателей.
Одним из решений было бы разблокировать SIGALRM, поэтому обработчик может одновременно выполнять несколько сигналов, но это вызовет проблемы состояния гонки.
Каков наилучший и самый простой способ реализации вытесняющих микропотоков? Все примеры, которые я нашел в Google, не были приоритетными.