私は FCFS スケジューラをシミュレートしようとしていますが、それを行う方法は、スレッドがキューに入っていない場合はキューにプッシュしますが、スレッドがキューにあるかどうかを確認することです。キューの先頭 (先入れ) で、ジョブの残り時間は > 0 です。私の問題は、キューの先頭になるまでスレッドを待機状態にする方法です。条件変数が役立つかもしれないと聞きましたが、それらがどのように機能するかはわかりません。
if (!(is_in_queue(ready_queue, tid))) { //thread is not in the queue
pthread_mutex_lock(&schedule_lock);
ready_queue = enqueue(ready_queue, currentTime, tid, remainingTime, tprio);
pthread_mutex_unlock(&schedule_lock);
}
else{ //thread is in queue
if (tid == head_of_queue(ready_queue) && remainingTime >0) { //need to schedule this thread for full time
return currentTime +1; //schedule on the next unit of "time"
}
else if (tid == head_of_queue(ready_queue) && remainingTime == 0){ //need to go to next task
pthread_mutex_lock(&schedule_lock);
ready_queue = dequeue(ready_queue);
pthread_mutex_unlock(&schedule_lock);
}
else{ //not at the head of the queue
//How do i wait until it is at the head??
}
}