0
void Mythread::threadSchedule(int n)
{
    if(threadMap_.size() > 1)
    {
        int lastId = current_;  
        if(current_ != (--threadMap_.end())->first)
        {
            auto it = threadMap_.find(current_);
            current_ = (++it)->first;
        }
        else
        {
            current_ = threadMap_.begin()->first;
        }

        swapcontext(threadMap_[lastId].get(),threadMap_[current_].get());
    }
}

最近、ucontext で実装されたユーザーレベルのスレッドを見ましたが、スレッドがどのように切り替わるのかわかりません。上記のコードでは、これが機能した後、 ratherswapcontextのコンテキストは?内にある必要があります。しかし、コンテキストは lastID ブレークポイントを持つスレッドにあります。に保存された「現在のコンテキスト」が現在の関数内のコンテキストではなく、古いスレッドのコンテキストであることは非常に混乱しています。コード全体はhttps://github.com/Miaoshuai/CoroutineにありますthreadMap_[lastId].get()threadScheduleswapcontext(ucontext_t *oucp, ucontext_t *ucp)oucpthreadSchedule(int n)

4

0 に答える 0