A release operation publishes preceding effects so that a corresponding acquire operation can observe them. C synchronization functions commonly work in release–acquire pairs. section 21.2
One-time initialization
The first call to call_once(&obj, g) acts as a release operation; later calls using the same object act as acquire operations. Writes performed by g(), such as computing a file name and opening a stream, are therefore visible when those later calls return. section 21.2
Common release–acquire pairs include:
- thrd_create and entry to the created function; thread return or thrd_exit and the corresponding join-related synchronization. section 21.2

