comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Interfacing to C: multithreaded callbacks
Date: Wed, 13 Jun 2007 10:11:30 +0200
Date: 2007-06-13T10:08:52+02:00	[thread overview]
Message-ID: <m8lrp9shht63$.w8hlpj4jf0ve$.dlg@40tude.net> (raw)
In-Reply-To: 1181678190.757347.67290@x35g2000prf.googlegroups.com

On Tue, 12 Jun 2007 12:56:30 -0700, Maciej Sobczak wrote:

> The problem is when the C library creates additional threads and calls
> the client back in the context of those threads. ARM says nothing (?)
> about the relaion between Ada tasks and system threads. If the
> relation is 1:1 (ie. tasks are implemented as system threads), then
> the whole scheme might work just fine, provided that there is no task-
> specific data that Ada runtime expects and will not find. On the other
> hand, if the relation between tasks and threads is not 1:1, we will
> just enjoy undefined behavior.

Yes, when Ada tasks aren't mapped onto system threads, then system calls
potentially might block all Ada tasks. This includes whatever POSIX layer.

> Is there any water-proof implementation pattern for such problems?
> Consider both the general case and then GNAT as the target Ada
> compiler on POSIX systems.

You can marshal messages from C callbacks. With busy waiting and one
publisher - one subscriber, you don't need anything but shared memory to
implement that.

However, when talking about  POSIX targets, I would assume Ada tasks being
POSIX threads.

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



  reply	other threads:[~2007-06-13  8:11 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-12 19:56 Interfacing to C: multithreaded callbacks Maciej Sobczak
2007-06-13  8:11 ` Dmitry A. Kazakov [this message]
2007-06-13 15:23   ` Maciej Sobczak
2007-06-13 15:55     ` Dmitry A. Kazakov
2007-06-13 19:57 ` Simon Wright
replies disabled

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