From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,b59b337045eece60 X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII Path: g2news2.google.com!news2.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!nx01.iad.newshosting.com!newshosting.com!newsfeed.icl.net!newsfeed.fjserv.net!oleane.net!oleane!hunter.axlog.fr!nobody From: Jean-Pierre Rosen Newsgroups: comp.lang.ada Subject: Re: Structure of the multitasking server Date: Fri, 19 Sep 2008 15:34:00 +0200 Organization: Adalog Message-ID: References: <8b4d1170-22e6-40d3-8ed1-096dc0163491@m36g2000hse.googlegroups.com> NNTP-Posting-Host: mailhost.axlog.fr Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Trace: s1.news.oleane.net 1221827679 30213 195.25.228.57 (19 Sep 2008 12:34:39 GMT) X-Complaints-To: abuse@oleane.net NNTP-Posting-Date: Fri, 19 Sep 2008 12:34:39 +0000 (UTC) User-Agent: Thunderbird 2.0.0.16 (Windows/20080708) In-Reply-To: <8b4d1170-22e6-40d3-8ed1-096dc0163491@m36g2000hse.googlegroups.com> Xref: g2news2.google.com comp.lang.ada:7773 Date: 2008-09-19T15:34:00+02:00 List-Id: Maciej Sobczak a �crit : > Hi all, > > Imagine a server with fixed number of worker tasks. There is no queue > of jobs and jobs are immediately passed to one of the tasks that is > currently idle. There is a separate task (or just the main one) that > provides jobs for worker tasks. [...] Why not simply use a rendezvous? Each worker has an entry Get_Job: task body Worker_Task is Job : Job_Type; begin loop Get_Job (Job); -- do the job ... end loop; end Worker_Task; and the server is simply (assuming Servers is an array of Worker_Task): loop Job := ... Found_Worker := False; for I in Servers'Range loop select Server (I).Get_Job (Job); Found_Worker := True; exit; else -- This server is busy null; end select; end loop; if not Found_Worker then -- all pipelines are busy, -- but the overflow handling is not shown... end if; end loop; -- --------------------------------------------------------- J-P. Rosen (rosen@adalog.fr) Visit Adalog's web site at http://www.adalog.fr