calling thread is supposed to see accesses issued by the initializer. This means that the read of the once_control->state variable should have an acquire semantic. Use atomic_thread_fence_acq() when the value read is ONCE_DONE, instead of straightforward atomic_load_acq(), to only put a barrier when needed (*). On the other hand, the updates of the once_control->state with the intermediate progress state do not need to synchronize with other state accesses, remove _acq suffix. Reviewed by: alc (previous version) Suggested by: alc (*) Sponsored by: The FreeBSD Foundation MFC after: 1 week |
||
---|---|---|
.. | ||
arch | ||
support | ||
sys | ||
tests | ||
thread | ||
libthr.3 | ||
Makefile | ||
Makefile.depend | ||
plockstat.d | ||
pthread.map |