c951001.a

来自「linux下编程用 编译软件」· A 代码 · 共 193 行

A
193
字号
-- C951001.A----                             Grant of Unlimited Rights----     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained --     unlimited rights in the software and documentation contained herein.--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making --     this public release, the Government intends to confer upon all --     recipients unlimited rights  equal to those held by the Government.  --     These rights include rights to use, duplicate, release or disclose the --     released technical data and computer software in whole or in part, in --     any manner and for any purpose whatsoever, and to have or permit others --     to do so.----                                    DISCLAIMER----     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED --     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE --     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A--     PARTICULAR PURPOSE OF SAID MATERIAL.--*---- OBJECTIVE:--      Check that two procedures in a protected object will not be --      executed concurrently.---- TEST DESCRIPTION:--      A very simple example of two tasks calling two procedures in the same --      protected object is used.  Test control code has been added to the--      procedures such that, whichever gets called first executes a lengthy--      calculation giving sufficient time (on a multiprocessor or a--      time-slicing machine) for the other task to get control and call the--      other procedure.  The control code verifies that entry to the second--      routine is postponed until the first is complete.------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0----!with Report;with ImpDef;procedure C951001 is   protected Ramp_31 is      procedure Add_Meter_Queue;      procedure Subtract_Meter_Queue;      function  TC_Failed return Boolean;      private      Ramp_Count : integer range 0..20 := 4;  -- Start test with some                                              -- vehicles on the ramp         TC_Add_Started       : Boolean := false;      TC_Subtract_Started  : Boolean := false;      TC_Add_Finished      : Boolean := false;      TC_Subtract_Finished : Boolean := false;      TC_Concurrent_Running: Boolean := false;         end Ramp_31;      protected body Ramp_31 is      function TC_Failed return Boolean is      begin         -- this indicator will have been set true if any instance         -- of concurrent running has been proved         return TC_Concurrent_Running;      end TC_Failed;      procedure Add_Meter_Queue is      begin         --==================================================         -- This section is all Test_Control code         TC_Add_Started := true;         if TC_Subtract_Started then             if not TC_Subtract_Finished then               TC_Concurrent_Running := true;            end if;         else            -- Subtract has not started.             -- Execute a lengthy routine to give it a chance to do so            ImpDef.Exceed_Time_Slice;            if TC_Subtract_Started then                -- Subtract was able to start so we have concurrent                -- running and the test has failed               TC_Concurrent_Running := true;            end if;         end if;         TC_Add_Finished := true;         --==================================================         Ramp_Count := Ramp_Count + 1;      end Add_Meter_Queue;      procedure Subtract_Meter_Queue is      begin         --==================================================         -- This section is all Test_Control code         TC_Subtract_Started := true;         if TC_Add_Started then             if not TC_Add_Finished then               -- We already have concurrent running               TC_Concurrent_Running := true;            end if;         else            -- Add has not started.             -- Execute a lengthy routine to give it a chance to do so            ImpDef.Exceed_Time_Slice;            if TC_Add_Started then                -- Add was able to start so we have concurrent                -- running and the test has failed               TC_Concurrent_Running := true;            end if;         end if;         TC_Subtract_Finished := true;         --==================================================         Ramp_Count := Ramp_Count - 1;      end Subtract_Meter_Queue;      end Ramp_31;begin   Report.Test ("C951001", "Check that two procedures in a protected" &                           " object will not be executed concurrently");   declare -- encapsulate the test      task Vehicle_1;      task Vehicle_2;      -- Vehicle_1 and Vehicle_2 are simulations of Instances of the task      -- of type Vehicle in different stages of execution      task body Vehicle_1 is      begin         null;  -- ::::: stub.  preparation code                  -- Add to the count of vehicles on the queue            Ramp_31.Add_Meter_Queue;         null;  -- ::::: stub:  wait at the meter then pass to first sensor         -- Reduce the count of vehicles on the queue         null;  -- ::::: stub: Ramp_31.Subtract_Meter_Queue      exception         when others =>               Report.Failed ("Unexpected Exception in Vehicle_1 task");      end Vehicle_1;      task body Vehicle_2 is      begin         null;  -- ::::: stub.  preparation code                  -- Add to the count of vehicles on the queue            null;  -- ::::: stub Ramp_31.Add_Meter_Queue;           null;  -- ::::: stub:  wait at the meter then pass to first sensor         -- Reduce the count of vehicles on the queue         Ramp_31.Subtract_Meter_Queue;      exception         when others =>               Report.Failed ("Unexpected Exception in Vehicle_2 task");      end Vehicle_2;     begin      null;   end;   -- encapsulation   if Ramp_31.TC_Failed then      Report.Failed ("Concurrent Running detected");   end if;   Report.Result;end C951001;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?