[m-users.] Global variables that are local to the thread

Volker Wysk post at volker-wysk.de
Mon Nov 6 21:47:07 AEDT 2023


Am Montag, dem 06.11.2023 um 16:04 +1100 schrieb Julien Fischer:
> 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.

Then I'll probably go along with you.

> > 
> > 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.)

Thanks

Volker


More information about the users mailing list