mini-gmp mpz_{get,set}_d not fully compatible with GMP

Niels Möller nisse at lysator.liu.se
Tue Mar 13 14:12:27 UTC 2018


Vincent Lefevre <vincent at vinc17.net> writes:

> More than an order issue, this is undefined behavior. In C11:
>
> 5.1.2.4 Multi-threaded executions and data races
>
>    4  Two expression evaluations conflict if one of them modifies a
>       memory location and the other one reads or modifies the same
>       memory location.
>
>   25  The execution of a program contains a data race if it contains
>       two conflicting actions in different threads, at least one of
>       which is not atomic, and neither happens before the other. Any
>       such data race results in undefined behavior.

Does C11 provide any way to initialize a local static variable, like in
recent C++? I.e., not code running before main, but code running the
first time the function is entered, and guaranteed to run just once?

> I don't think volatile matters. AFAIK, what you need is _Atomic (C11).

If we can make this thread safe with C11, I think it's fine to document
that mini-gmp requires C11 for thread safety. (I'd still prefer the
simpler way of reying on float.h constants, though).

Regards,
/Niels

-- 
Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
Internet email is subject to wholesale government surveillance.


More information about the gmp-devel mailing list