introduction
My project that is peer-to-peer library, and every peer introduce the library, and every peer call init function.
But actually, in one peer, my library is low-level, so that another two library use it, like below dependency.
liba.so
has init function, libb.so
has init function, and both call libpeer.so
’s init function.
So libpeer.so
init function must be called only once in one process.
First I implement in init function with std::mutex and inited flag
, to avoid race data, and inited
to indicate libpeer.so
is already inited, and return directly.
And some seconds later, I realize std::call_once
is just for this scenario.
but how std::call_once
is implemented ?
Executes the Callable object f exactly once, even if called concurrently from several threads.
abseil::call_once is lock free.