Thread-safety and lazy-initialization of libraries

Rene Zwanenburg via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jun 30 14:36:09 PDT 2014


On Monday, 30 June 2014 at 21:32:34 UTC, Sergey Protko wrote:
> On Monday, 30 June 2014 at 21:05:32 UTC, bearophile wrote:
>> Sergey Protko:
>>
>>> libmpg123 has mpg123_init and mpg123_exit functions, which 
>>> are not thread-safe, so we should to call them only once per 
>>> process. Most of useful libraries also has such stuff. But 
>>> manual initialization is killing all beauty of high-level 
>>> bindings.
>>
>> I think module "static this" is thread-local, so in theory you 
>> can use that. But I don't know if it's a good idea to perform 
>> heavy computations inside those module static this.
>>
>> Bye,
>> bearophile
>
> I thought about this. But static constructors doesn't solve 
> problem with on-demand initialization in case, where there is 
> several classes. For example Decoder and Encoder both requires 
> library to be initialized before they are actually be used.

Use a shared module constructor? It's called only once, not 
per-thread.


module mpg123;

shared static this()
{
   mpg123_init();
}

shared static ~this()
{
   mpg123_exit();
}


More information about the Digitalmars-d-learn mailing list