Основы объектно-ориентированного проектирования


Предусловия при параллельном выполнении - часть 2


Это тот же дефект, который ранее потребовал от нас обеспечить резервирование объекта через инкапсуляцию.

Мы снова можем попробовать инкапсуляцию, написав PUT1 или PUT2 как процедуры, в которые buffer передается в качестве аргумента, например, для PUT1:

put_if_possible (b: BOUNDED_BUFFER [T]; x: T) is -- Вставить x в b, если это возможно; иначе вернуть в was_full - значение true do if b.full then was_full:= True else put (b, x); was_full := False end end

Но на самом деле это не очень поможет клиенту. Во-первых, причиняет неудобство проверка условия was_full при возврате, а затем что делать, если оно истинно? Попытаться снова - возможно, но нет никакой гарантии успеха. На самом деле хотелось бы иметь способ выполнить put в тот момент, когда буфер будет наверняка неполон, даже если придется ждать, пока это случится.




Начало  Назад  Вперед



Книжный магазин