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;