Как я могу проверить, что контекст завершен и перешел к uc_link? - PullRequest
1 голос
/ 03 марта 2020

Я устанавливаю планировщик в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...