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