Каков наилучший способ для сна потоков, не используя занятую реализацию ожидания? - PullRequest
0 голосов
/ 19 октября 2019

, поэтому я пытаюсь уменьшить загрузку процессора в моей фиктивной операционной системе. У меня есть функция, чтобы приостановить выполнение вызывающего потока до тех пор, пока время не увеличится хотя бы на x отметок таймера. Если система не находится в режиме ожидания, поток не должен просыпаться после того, как пройдено ровно x тиков, он помещается обратно в очередь готовых потоков после того, как дождался нужного количества тиков. В идеале для этого есть реализация семафора, но я не знаю как. Тем не менее, если у вас есть лучшее решение для семафоров, было бы интересно услышать это также.

Для справки вот исходный код с описаниями:

void timer_sleep (int64_t ticks){

  int64_t start = timer_ticks ();

  ASSERT (intr_get_level () == INTR_ON);
  while (timer_elapsed (start) < ticks)
    thread_yield ();
}

timer_ticks -дает нам количество пройденных тиков с момента запуска ОС.

timer_elapsed - сообщает нам количество пройденных timer_ticks() с другого числа тиков.

intr_get_level - используется дляполучить значение того, включены ли прерывания или нет.

thread_yield - Это дает ЦП. Текущий поток не переводится в спящий режим и может быть снова запланирован немедленно по прихоти планировщиков.

...