comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon.j.wright@mac.com>
Subject: Re: Interfacing to C: multithreaded callbacks
Date: Wed, 13 Jun 2007 20:57:35 +0100
Date: 2007-06-13T20:57:35+01:00	[thread overview]
Message-ID: <m2ps3z7hlc.fsf@mac.com> (raw)
In-Reply-To: 1181678190.757347.67290@x35g2000prf.googlegroups.com

Maciej Sobczak <see.my.homepage@gmail.com> writes:

> Suppose there is a C library that creates additional threads
> (system- level threads in the pthread_create sense) and can call the
> client code back via function pointers that the client code provides
> to the library. Asynchronous I/O library that notifies the client
> about state changes can be a good motivating example.
>
> It is possible to pass Ada callback to the C library - it's enough
> to pragma Export(C, My_Procedure) and pass appropriate access to
> procedure. This way we could, for example, use the standard C
> function qsort.
>
> 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.  Looks
> like a shaky ground.
>
> 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.

For GNAT, see GNAT.Threads.Register/Unregister_Thread -- they seem to
think it's quite tricky, maybe other vendors have a different slant.



      parent reply	other threads:[~2007-06-13 19:57 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
2007-06-13 15:23   ` Maciej Sobczak
2007-06-13 15:55     ` Dmitry A. Kazakov
2007-06-13 19:57 ` Simon Wright [this message]
replies disabled

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