考虑 Ada95 中的以下控制器(受保护对象),以适应任务调用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;
对象是更改受保护对象的行为,可能是以下行:
entry Waiting (Marker : in Marker_Type) when Tentative_Count > 0 is
的对象,所以不会提供更多,只能说你可能最好a)重读这本书中关于受保护对象的章节;b)了解代码的目标是什么以及老师/书籍在问什么。
b部分尤其重要,因为在现实生活中,你需要能够将规范转化为实现;而且通常,精确的措辞与示例和/或示例/推理不一致。
其他资源:
- Ada 95 基本原理:II.9 受保护的类型
- Ada 95 基本原理:9.1 受保护的类型