comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Simulating OS semaphore behavior
Date: Fri, 25 Aug 2006 17:09:47 +0200
Date: 2006-08-25T17:09:47+02:00	[thread overview]
Message-ID: <3zrqu2whdwk2.1fobni2jyzalh.dlg@40tude.net> (raw)
In-Reply-To: 1156518048.848919.126340@75g2000cwc.googlegroups.com

On 25 Aug 2006 08:00:48 -0700, REH wrote:

> Abstractly, I want to allow an arbitrary number tasks to wait for a
> particular event, and when the event occurs, wake all those tasks.
> Thereafter, tasks can again block waiting for the next occurrence.
> Something like:
> 
> protected type Event is
>   entry Wait;
>   procedure Signal;
> end Event;
> 
> Implementing the above for one task seems simple enough, but how would
> it been done for an arbitrary number such that the behavior is:
> 1. Wait's guard is initially false.
> 2. some tasks call Wait.
> 3. Signal is called.
> 4. Wait's guard becomes true.
> 5. all tasks currently queued on Wait are allowed to continue.
> 6. Wait's guard becomes false.

That looks like a classic automatic event for multiple tasks. Make Signal
an entry:

   protected body Event is
      entry Wait when Signal'Count > 0 is
      begin
         null;
      end Wait;
      entry Signal when Wait'Count = 0 is
      begin
         null;
      end Signal;
   end Event;

Signal is blocked until all waiting tasks get released. There is no race
condition because fresh attempts to Wait are blocked if a signal is
pending.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2006-08-25 15:09 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-25 15:00 Simulating OS semaphore behavior REH
2006-08-25 15:09 ` Dmitry A. Kazakov [this message]
2006-08-25 15:25   ` REH
2006-08-25 17:31   ` Jean-Pierre Rosen
2006-08-26  8:39     ` Dmitry A. Kazakov
2006-08-26 13:34       ` REH
2006-08-26 13:42         ` jimmaureenrogers
2006-08-27 14:00           ` Simon Wright
2006-08-26 20:18         ` Dmitry A. Kazakov
2006-08-26 20:29           ` REH
2006-08-27 17:07             ` Dmitry A. Kazakov
2006-08-27 18:02             ` Simon Wright
2006-08-27 22:28               ` REH
  -- strict thread matches above, loose matches on Subject: below --
2006-08-31 16:24 Anh Vo
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox