OS_WakeupThread

構文

#include <nitro/os.h>
void OS_WakeupThread( OSThreadQueue*  queue );

引数

queue 復帰させるスレッドが登録されているのスレッドキューへのポインタ

返り値

なし。

説明

指定されたスレッドキュー中のスレッドを全て復帰します。

スレッドキュー queue が指定された OS_SleepThread() で一時停止状態になっているスレッドをまとめて実行可能状態にします。その後スレッドは、優先順位に従ってスケジューリングされます。優先順位は OS_CreateThread() でスレッドを作成するときに与えたもので、同じ優先度の場合、内部リストの状態に依りますのでどちらが優先されるかはユーザ側からは不定です。なおスレッドキューにスレッドを登録した順序には関係ありません。

以下は OS_WakeupThread() を用いた例です。

(例)
#define THREAD1_PRIO 1
#define THREAD2_PRIO 2
#define STACK_SIZE 1024
void proc1( void );
void proc2( void );
OSThread thread1;
OSThread thread2;
OSThreadQueue queue;
u64 stack1[ STACK_SIZE / sizeof(u64) ];
u64 stack2[ STACK_SIZE / sizeof(u64) ];

void nitroMain()
{
 :
 OS_InitThread();
 OS_InitThreadQueue( &queue );
 OS_CreateThread( &thread1, proc1, stack1+STACK_SIZE/sizeof(u64),
            STACK_SIZE, THREAD1_PRIO );
 OS_CreateThread( &thread2, proc2, stack2+STACK_SIZE/sizeof(u64),
            STACK_SIZE, THREAD2_PRIO );
 OS_WakeupThreadDirect( &thread1 );
 OS_WakeupThreadDirect( &thread2 );
 :
 while(1)
 {
   :
  OS_WakeupThread( &queue );
   :
 }
}

void proc1( void )
{
 while(1)
 {
  :
  OS_SleepThread( &queue );
  :
 }
}

void proc2( void )
{
 while(1)
 {
  :
  OS_SleepThread( &queue );
  :
 }
}

参照

OS_InitThread, OS_CreateThread, OS_SleepThread, OS_WakeupThreadDirect

履歴

2004/03/12 同じ優先順位の場合の記述変更
2003/12/01 初版