Избегайте много времени, чтобы закончить сценарий "слишком много молока"

Ниже приведено простое решение "слишком большой проблемы с молоком".

    lock mutex;

    while (1){

        lock_acquire(mutex);

        if (no milk)
            go and buy milk;//action-1

        lock_release(mutex);
    }

Проблема в том, что action-1 может занять много времени, и любой из процессов, ожидающих получения мьютекса, будет ждать долгое время.

Один из способов избежать этого - иметь таймер, чтобы процесс покупки молока возвращался с молоком или без него, как только таймер сработал. Как видите, с этим есть проблемы. (например: нет способа определить, купил ли процесс молоко и идет ли он домой)

Есть ли лучшее решение для этого?

РЕДАКТИРОВАТЬ: слишком много молока проблема

0 ответов

Решение в реальной жизни - оставить записку о том, что вы пошли покупать молоко.

Теперь в программировании это не совсем решает проблемы, а только снижает риск состояния гонки, поскольку Джек и Джилл смотрят на холодильник, когда он пуст, и оба оставляют записку. Но если вы заблокировали партию "оставьте записку, если нет молока и нет заметки", то все готово. Время, необходимое для того, чтобы оставить записку, очень мало по сравнению с покупкой молока.

Другие вопросы по тегам