init_enter
Description:
Function to be called when starting a critical initialization section.
The argument location
must point to a static 0-initialized variable that will be set to a value other than 0 at the end of the
initialization section. In combination with init_leave and the unique
address value_location
, it can be ensured that an initialization section will be executed only once during a program's life time,
and that concurrent threads are blocked until initialization completed. To be used in constructs like this:
static gsize initialization_value = 0;
if (g_once_init_enter (&initialization_value))
{
gsize setup_value = 42; // initialization code here
g_once_init_leave (&initialization_value, setup_value);
}
// use initialization_value here
While location
has a `volatile` qualifier, this is a historical artifact and the pointer passed to it should not be `volatile`.
Parameters:
location |
location of a static initializable variable containing 0 |
Returns:
true if the initialization section should be entered, false and blocks otherwise |