[m-users.] Global variables that are local to the thread
Peter Wang
novalazy at gmail.com
Mon Nov 6 16:13:02 AEDT 2023
On Mon, 06 Nov 2023 16:04:10 +1100 Julien Fischer <jfischer at opturion.com> wrote:
>
> On Sun, 5 Nov 2023, Volker Wysk wrote:
>
> > I'm considering to build a new version of the ODBC library, that's thread-
> > safe. There's a point which I don't understand yet.
> >
> > The ODBC library has a number of global variables. For instance, the ODBC
> > environment handle. This makes it thread-unsafe.
> >
> > Can these variables be made local to the thread, while still being global,
> > so all foreign procedures in the same thread can access it? Or do I need to
> > introduce a new argument of some new type odbc_data, which is to be passed
> > to all predicates of the library? This type would hold all the formerly
> > global data, but it would be burdensome to pass it around all the time.
>
> Either approach could work. Personally, I would pass the extras
> infromation to all the predicates and avoid global state at all.
> >
Agreed.
> > Maybe use a thread-local mutable variable?
>
> You could use a thread-local mutable; I note that the reference manual
> doesn't currently talk about how to access the value of a thread-local
> mutable from C code. (It's done using the
> MR_{get,set}_thread_local_mutable macros in runtime/mercury_thread.h.)
I would consider those to be implementation details - use at your own
risk (of your program not compiling the future). You can access a
thread-local mutable from Mercury code, and just hand the value to a
foreign proc.
Peter
More information about the users
mailing list