7.2.20 _gfortran_caf_event_wait — Wait that an event occurred


Wait until the event count has reached at least the specified until_count; if so, atomically decrement the event variable by this amount and return.


void _gfortran_caf_event_wait (caf_token_t token, size_t index, int until_count, int *stat, char *errmsg, size_t errmsg_len)

tokenintent(in) An opaque pointer identifying the coarray.
indexintent(in) Array index; first array index is 0. For scalars, it is always 0.
until_countintent(in) The number of events which have to be available before the function returns.
statintent(out) Stores the STAT=; may be NULL.
errmsgintent(out) When an error occurs, this will be set to an error message; may be NULL.
errmsg_lenintent(in) the buffer size of errmsg

This function only operates on a local coarray. It acts like a loop checking atomically the value of the event variable, breaking if the value is greater or equal the requested number of counts. Before the function returns, the event variable has to be decremented by the requested until_count value. A possible implementation would be a busy loop for a certain number of spins (possibly depending on the number of threads relative to the number of available cores) followed by another waiting strategy such as a sleeping wait (possibly with an increasing number of sleep time) or, if possible, a futex wait.

The statement is an image-control statement but does not imply sync memory. Still, all preceding push communications of this image to the specified remote image have to be completed before event_wait on the remote image returns.