-1

考虑 Ada95 中的以下控制器(受保护对象)以适应任务调用此控制器,如果等待标记 (Marker ) 仅在初始化之前自然地Waiting()对应于选择标记 (),则它不会被置于等待状态:Selecting_Marker

protected type Controller is
    entry Waiting(Marker : in Marker_Type);
    procedure WakeUp(Marker : in Marker_Type);
private
    Tentative_Count : Natural := 0;
    Selecting_Marker : Marker_Type;
end Controller;

protected body Controller is

    entry Waiting (Marker : in Marker_Type) when Tentative_Count > 0 is
    begin
        Tentative_Count := Tentative_Count - 1;
        if Selecting_Marker /= Marker then 
            requeue Waiting;
        end if;
    end Waiting;

    procedure WakeUp (Marker : in Marker_Type) is
    begin
        Selecting_Marker := Marker;
        Tentative_Count := Waiting'Count;
    end WakeUp;

end Controller;
4

1 回答 1

2

对象是改变受保护对象的行为,可能是以下行:

entry Waiting (Marker : in Marker_Type) when Tentative_Count > 0 is

我对受保护对象并不精通,所以除了说你可能会更好 a) 重读本书关于受保护对象的章节之外,我不会提供更多信息;b) 了解代码的目标是什么以及教师/书籍的要求。

b 部分尤其重要,因为在现实生活中,您需要能够将规范转化为实现;并且通常准确的措辞与示例和/或示例/推理不一致。

其他资源:

于 2012-06-04T01:01:54.160 回答