generic

    type Object_Type is private;
    Object : in out Object_Type;

    Read_Time_Limit : in Duration := Duration'Last;
    Write_Time_Limit : in Duration := Duration'Last;

    -- for testing only
    with procedure Read_Put (Item : in Object_Type) is <>;

    -- for testing only
    with procedure Write_Put (Item : in Object_Type) is <>;

    -- for testing only
    with procedure Copy (From : in Object_Type; To : in out Object_Type);

package Shared_Variable is

    -- for testing only: Item made "in out" instead of "out"
    procedure Read (Item : in out Object_Type);
    procedure Write (Item : in Object_Type);

    Timed_Out : exception;

end Shared_Variable;