Ada受保护的类型

时间:2012-02-21 13:05:51

标签: function ada procedure

我在Ada中有一个包含程序和功能的简单包。我想把所有的功能和程序都放在受保护的类型中。

e.g。对于一个简单的.adb文件

package body Pack is

  procedure procedure1 (B : in out Integer) is
  begin
    B := new Integer;
  end procedure1;

  procedure procedure2 (B: in out Integer) is
  begin
    B.Cont(B.First-1) := 1;
  end procedure2;

  function procedure3 (B : Integer) return Boolean is
  begin
    return B.First = B.Last;
  end procedure3;

end pack;

和/或简单的.ads

package body Pack is

   procedure procedure1 (B : in out Integer);

   procedure procedure2 (B: in out Integer);

   function procedure3 (B : Integer) return Boolean;

end pack;

我该怎么做呢?

1 个答案:

答案 0 :(得分:6)

关于受保护类型的事情是它保护某些东西(防止并发访问)。从你的代码中很难看出你想保护什么。

如果您想要进行线程安全增量,那么您可能有一个类似

的规范
package Pack is
   protected type T is
      procedure Set (To : Integer);
      procedure Increment (By : Integer);
      function Get return Integer;
   private
      Value : Integer := 0;
   end T;
end Pack;

(这远非完美;您希望在声明Value时能够指定初始T,但这已经开始变得复杂了。

在这种情况下,要保护的是Value。您希望确保如果两个任务在“相同”时间调用Increment,一个By => 3,一个By => 4,则Value最终会增加7

身体看起来像

package body Pack is
   protected body T is
      procedure Set (To : Integer) is
      begin
         Value := To;
      end Set;
      procedure Increment (By : Integer) is
      begin
         Value := Value + By;
      end Increment;
      function Get return Integer is
      begin
         return Value;
      end Get;
   end T;
end Pack;

推荐阅读:受保护类型的Wikibooks section