sto*_*oud 1 procedure function ada
我在Ada中有一个包含程序和功能的简单包.我想把所有的功能和程序都放在受保护的类型中.
例如,对于一个简单的.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;
Run Code Online (Sandbox Code Playgroud)
或者简单的.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;
Run Code Online (Sandbox Code Playgroud)
我该怎么办呢?
关于受保护类型的事情是它保护某些东西(防止并发访问).从您的代码中很难看出您想要保护的是什么.
例如,如果你想做一个线程安全的增量,你可能会有一个类似的规范
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;
Run Code Online (Sandbox Code Playgroud)
(这远非完美;你希望能够Value在声明a时指定初始值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;
Run Code Online (Sandbox Code Playgroud)
推荐阅读:受保护类型的Wikibooks部分.