Избегайте много времени, чтобы закончить сценарий "слишком много молока"
Ниже приведено простое решение "слишком большой проблемы с молоком".
lock mutex;
while (1){
lock_acquire(mutex);
if (no milk)
go and buy milk;//action-1
lock_release(mutex);
}
Проблема в том, что action-1 может занять много времени, и любой из процессов, ожидающих получения мьютекса, будет ждать долгое время.
Один из способов избежать этого - иметь таймер, чтобы процесс покупки молока возвращался с молоком или без него, как только таймер сработал. Как видите, с этим есть проблемы. (например: нет способа определить, купил ли процесс молоко и идет ли он домой)
Есть ли лучшее решение для этого?
РЕДАКТИРОВАТЬ: слишком много молока проблема
0 ответов
Решение в реальной жизни - оставить записку о том, что вы пошли покупать молоко.
Теперь в программировании это не совсем решает проблемы, а только снижает риск состояния гонки, поскольку Джек и Джилл смотрят на холодильник, когда он пуст, и оба оставляют записку. Но если вы заблокировали партию "оставьте записку, если нет молока и нет заметки", то все готово. Время, необходимое для того, чтобы оставить записку, очень мало по сравнению с покупкой молока.