Copyright | Will Thompson, Iñaki García Etxebarria and Jonas Platte |
---|---|
License | LGPL-2.1 |
Maintainer | Iñaki García Etxebarria (garetxe@gmail.com) |
Safe Haskell | None |
Language | Haskell2010 |
- newtype Once = Once (ManagedPtr Once)
- newZeroOnce :: MonadIO m => m Once
- noOnce :: Maybe Once
- onceInitEnter :: (HasCallStack, MonadIO m) => Ptr () -> m Bool
- onceInitLeave :: (HasCallStack, MonadIO m) => Ptr () -> Word64 -> m ()
- clearOnceRetval :: MonadIO m => Once -> m ()
- getOnceRetval :: MonadIO m => Once -> m (Ptr ())
- once_retval :: AttrLabelProxy "retval"
- setOnceRetval :: MonadIO m => Once -> Ptr () -> m ()
- getOnceStatus :: MonadIO m => Once -> m OnceStatus
- once_status :: AttrLabelProxy "status"
- setOnceStatus :: MonadIO m => Once -> OnceStatus -> m ()
Exported types
WrappedPtr Once Source # | |
(~) AttrOpTag tag AttrSet => Constructible Once tag Source # | |
((~) * info (ResolveOnceMethod t Once), MethodInfo * info Once p) => IsLabel t (Once -> p) Source # | |
((~) * info (ResolveOnceMethod t Once), MethodInfo * info Once p) => IsLabelProxy t (Once -> p) Source # | |
HasAttributeList * Once Source # | |
type AttributeList Once Source # | |
Methods
initEnter
:: (HasCallStack, MonadIO m) | |
=> Ptr () |
|
-> m Bool | Returns: |
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
onceInitLeave
and the unique address valueLocation
, 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:
C code
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
Since: 2.14
initLeave
:: (HasCallStack, MonadIO m) | |
=> Ptr () |
|
-> Word64 |
|
-> m () |
Counterpart to onceInitEnter
. Expects a location of a static
0-initialized initialization variable, and an initialization value
other than 0. Sets the variable to the initialization value, and
releases concurrent threads blocking in onceInitEnter
on this
initialization variable.
Since: 2.14
Properties
retval
clearOnceRetval :: MonadIO m => Once -> m () Source #
once_retval :: AttrLabelProxy "retval" Source #
status
getOnceStatus :: MonadIO m => Once -> m OnceStatus Source #
once_status :: AttrLabelProxy "status" Source #
setOnceStatus :: MonadIO m => Once -> OnceStatus -> m () Source #