Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,9 +0,0 @@
|
|||
package Semaphores is
|
||||
protected type Counting_Semaphore(Max : Positive) is
|
||||
entry Acquire;
|
||||
procedure Release;
|
||||
function Count return Natural;
|
||||
private
|
||||
Lock_Count : Natural := 0;
|
||||
end Counting_Semaphore;
|
||||
end Semaphores;
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
package body Semaphores is
|
||||
|
||||
------------------------
|
||||
-- Counting_Semaphore --
|
||||
------------------------
|
||||
|
||||
protected body Counting_Semaphore is
|
||||
|
||||
-------------
|
||||
-- Acquire --
|
||||
-------------
|
||||
|
||||
entry Acquire when Lock_Count < Max is
|
||||
begin
|
||||
Lock_Count := Lock_Count + 1;
|
||||
end Acquire;
|
||||
|
||||
-----------
|
||||
-- Count --
|
||||
-----------
|
||||
|
||||
function Count return Natural is
|
||||
begin
|
||||
return Lock_Count;
|
||||
end Count;
|
||||
|
||||
-------------
|
||||
-- Release --
|
||||
-------------
|
||||
|
||||
procedure Release is
|
||||
begin
|
||||
if Lock_Count > 0 then
|
||||
Lock_Count := Lock_Count - 1;
|
||||
end if;
|
||||
end Release;
|
||||
|
||||
end Counting_Semaphore;
|
||||
|
||||
end Semaphores;
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
with Semaphores;
|
||||
with Ada.Text_Io; use Ada.Text_Io;
|
||||
|
||||
procedure Semaphores_Main is
|
||||
-- Create an instance of a Counting_Semaphore with Max set to 3
|
||||
Lock : Semaphores.Counting_Semaphore(3);
|
||||
|
||||
-- Define a task type to interact with the Lock object declared above
|
||||
task type Worker is
|
||||
entry Start (Sleep : in Duration; Id : in Positive);
|
||||
end Worker;
|
||||
|
||||
task body Worker is
|
||||
Sleep_Time : Duration;
|
||||
My_Id : Positive;
|
||||
begin
|
||||
accept Start(Sleep : in Duration; Id : in Positive) do
|
||||
My_Id := Id;
|
||||
Sleep_Time := Sleep;
|
||||
end Start;
|
||||
--Acquire the lock. The task will suspend until the Acquire call completes
|
||||
Lock.Acquire;
|
||||
Put_Line("Task #" & Positive'Image(My_Id) & " acquired the lock.");
|
||||
-- Suspend the task for Sleep_Time seconds
|
||||
delay Sleep_Time;
|
||||
-- Release the lock. Release is unconditional and happens without suspension
|
||||
Lock.Release;
|
||||
end Worker;
|
||||
|
||||
-- Create an array of 5 Workers
|
||||
type Staff is array(Positive range 1..5) of Worker;
|
||||
Crew : Staff;
|
||||
begin
|
||||
for I in Crew'range loop
|
||||
Crew(I).Start(2.0, I);
|
||||
end loop;
|
||||
end Semaphores_Main;
|
||||
Loading…
Add table
Add a link
Reference in a new issue