-1

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;
4

1 に答える 1

2

目的は、保護されたオブジェクトの動作を変更することです。おそらく次の行です。

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

私は保護されたオブジェクトに精通していないので、おそらくあなたがより良いと言うことを除いて、それ以上のことは提供しません。a)保護されたオブジェクトに関する本の章を読み直します。b)コードの目的が何であるか、そして教師/本が何を求めているかを理解する。

パートbは特に重要です。実際には、仕様を実装に変換できる必要があるためです。多くの場合、正確な表現は例や例/理由と矛盾しています。

追加のリソース:

于 2012-06-04T01:01:54.160 に答える