#linux
#linux
Вопрос:
мне нужно написать поток, который имитирует стол в ресторане. За столом четыре посадочных места. В случайное время приходят клиенты, и если они находят свободное место, они остаются, в противном случае они уходят. Не могли бы вы, пожалуйста, мне помочь? Спасибо
Комментарии:
1. Какой код вы уже написали? С чем вам нужна помощь?
2. Это домашнее задание? Есть ли что-то еще в проблеме? Когда люди за столом уходят?
3. Я создал поток для таблицы, но у меня проблемы с заполнением его людьми, которые приходят и уходят в случайное время.
Ответ №1:
Вот некоторый псевдокод:
-- A Table Thread
integer num_free_seats := 4
loop forever
wait for customer c
if num_free_seats > 0
seat_customer(c)
num_freeSeats := num_free_seats - 1
else
throw_out_customer(c)
end if
Ответ №2:
Итак, вам нужен семафор, инициализированный количеством мест за столом. Люди (предположительно, другие потоки) проверяют это. Они ждут на семафоре, пока не войдут. Они публикуют, когда уходят. Если им действительно нужно немедленно уйти, если они не получают места, тогда используйте что-то вроде sem_trywait. Используйте какой-то рандомизированный режим сна, чтобы определить, как долго они находятся за столом.