甲府方重信Blog

...Shigenobu Koufugatas Blog

  • Increase font size
  • Default font size
  • Decrease font size
Error
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
Home 業務日誌 Adaプログラミング Adaチュートリアル セクション13.4 - Protected型パート2

Adaチュートリアル セクション13.4 - Protected型パート2

E-mail Print PDF

セクション 13.4 - Protected型パート 2

さて、プログラマーは保護された操作の違った型について学んできました。また、Protected型の宣言を見てきました。

ここでは例題を見てみましょう。 - これは、Protected型を用いてセマフォを実装した例です。プログラマーは、セマフォに「Seize」とリクエストすることが出来ます。ひとたび、Seizeが呼ばれると、もはやいかなるタスクも、セマフォがリリースされるまでSeizeすることができません。

  protected type Resource is
    entry Seize;        -- Acquire this resource exclusively.
    procedure Release;  -- Release the resource.
  private
    Busy : Boolean := False;
  end Resource;
 
  protected body Resource is
    entry Seize when not Busy is
    begin
      Busy := True;
    end Seize;
 
    procedure Release is
    begin
      Busy := False;
    end Release;
  end Resource;

ここで、Protectedな変数つまりProtected型Resourceのインスタンスの例になります。:

 

  Control : Resource;

そして、ここでこのインスタンスの例になります。:

 

  Control.Seize;
  Diddle;
  Control.Release;

ここで、Protected型の宣言に対する BNF とそれに対応するProtectedなbodyを見てみましょう。:

 

  protected_declaration ::= "protected" [ "type" ] identifier "is"
                            { protected_operation_declaration }
                            [ "private" { protected_element_declaration } ]
                            "end" [ identifier ]
  protected_operation_declaration ::= subprogram_declaration |
                                      entry_declaration
  protected_element_declaration ::= protected_operation_declaration |
                                    component_declaration
  
  protected_body ::= "protected" "body" identifier "is"
                     { protected_operation_item }
                     "end" [ identifier ] ";"

セマフォは、並列プログラムに対してよく知られた構造体なので、Protected型を用いてセマフォをどのように実装するかを見てきたわけです。しかしながら、セマフォを使用して、ビルディング・ブロックとして、相互にインタラクションするタスクを構築しようとする代わりに、直接、Protected型を使用したほうが良いのです。理由のひとつは、セマフォは複雑なタスクのインタラクションに対しては、正確に使用するのが難しいことで有名です。 - ひとたび、複数のセマフォが関係してくると、全てのケースに対して正確にインタラクションを得るのが難しくなることがあります。(実際、そのような正しいインタラクションを得るには、並列プロトコルの公式な証明を開発する必要があるかもしれません。それは、実際実行するのが難しいことなのです。). また、例外が発生した際、Adaは自動的にProtected型を取り扱うことが出来ます。それは、「手動で」、取り扱った場合には間違い易いような箇所です。 のみならず、Proteced型はより効率的かもしれません。

ひとつ、特にProtected型の使用で有益なことは、タスク間のバッファされたメッセージ・キューの実装です。この例については、次のページをご覧ください。 Ada Rationale (Part 2, section 9.1.2) (the Mailbox_Pkg protected type)。

出典: http://www.adahome.com/Tutorials/Lovelace/s13s4.htm

Last Updated on Tuesday, 05 June 2012 17:43  

ニュース速報

さっきの件だが、資料の候補をあげて、増田さんに依頼メールを送った。

うまく、話がつながるとよいのだが。さて、どうなることやら。