KOZOSのレディキューですが、次のようにプライオリティごとにあります。
static struct {
kz_thread *head;
kz_thread *tail;
} readyque[PRIORITY_NUM];
一方、レディキューは1つにするという考え方もあると思います。そのほうがシンプルですし。例えば、こんな感じで
typedef struct _kz_list {
kz_thread *thrd; /* スレッド */
int aux; /* 補助情報 */
struct _kz_list *next; /* 次の要素 */
} kz_list;
static kz_list readyque;
auxという補助情報ですが、基本的にはプライオリティ値を入れます。ただ、先頭要素であるreadyqueにはリストにつながっている要素数を入れておきます。
次にリスト操作のAPIを考えて見ますが、
/* スレッドをリストに挿入する */
void kz_insert(kz_list* list, kz_thread* thrd);
例えば、新しくスレッドを作成した場合は、kz_insertを呼び出してreadyque
にスレッドを挿入します。スレッドの挿入は、プライオリティ値の小さい順に
しておきます。
0 件のコメント:
コメントを投稿