Я устанавливаю планировщик в C и много использую setcontext и swapcontext.
Я устанавливаю контекст для функции и меняю другие функции, используя таймер, но я не не знает, как проверить, завершила ли функция и перешла ли она на uc_link.
Код слишком длинный и это библиотека, поэтому она неполная, поэтому вот псевдокод того, что она должна делать
addThread(someFunction)
if scheduler not setup
setupScheduler()
end
setup context for someFunction
insert to queue
end
schedule()
if current context is not completed or was interrupted by timer
move current context to end of queue
else //it is completed
do not add back into queue or setup something to skip when next in queue
end
setcontext to first in queue
end
setupScheduler()
make ucontext_t for scheduler
swap to context of schedule() whenever SIGVTALRM triggers
setup timer to trigger SIGVTALRM after 25ms
end
main()
addThread(foo)
addThread(bar)
while(1); //busy work
end