2

スレッド ライブラリを実装する必要があります。しかし、私は本当にこのyield()関数を実行することができません.yield()では、現在のスレッドを準備完了スレッドキューの最後にプッシュし、最初のスレッドをポップアウトして実行する必要があります.(FIFO) I swapcontext() を使用しています。だから私のコードはこのようなものです。

yield()
{
 if(head!=NULL) // if FIFO is not empty, yield to a ready thread`
 {
    ready_queue_entry * old_thread= NULL;
    old_thread = new_thread;

    Push(old_thread);// push the current one to the FIFO
    new_thread = Pop();// pop the first one from the FIFO

    //save the current context and jump to the new thread context.
    swapcontext(&(old_thread->context),&(new_thread->context)); 
  }
}

ポップ機能とプッシュ機能がうまく機能すると確信しています。しかし、正しいスレッド コンテキストを取得できません。私は本当に混乱しています。誰かが私を助けてくれることを願っています。ありがとう。

4

1 に答える 1

0

私は同様の問題に答えました。こちらをご覧ください

代わりに「sigsetjmp/siglongjmp」を使用してみてください。

于 2013-09-11T05:41:41.380 に答える