Fortran

Guide To Learn

Images posting events is just one side of the transaction. For an image to wait for the event that it owns, it needs to execute the event wait statement. This statement has the syntax

event wait(event_var[, until_count, stat, errmsg)

where

  • event_var is a scalar variable of event_type and has the same meaning as in event post.
  • until_count is an optional integer expression that’s the number of posted events for which to wait, with a default value of 1.
  • stat and errmsg are optional output parameters for error handling and have the same meaning as before.

In a nutshell, event wait blocks the image that executes it until some other image posts an event to it. If until_count is provided and greater than 1, the image will wait until that many events have been posted. On successful execution of event wait, the internal event count is decremented by until_count, if provided, and by 1 otherwise. For example, this statement

event wait(notification, until_count=100)

blocks the executing image until 100 events have been posted to the notification variable from any other image. Once executed, the internal event count is decremented by exactly 100. Note that this doesn’t mean that the event count is always reduced to zero, because remote event posts can keep incrementing the event count before event wait has time to return.

Using event wait together with the until_count parameter allows you to not block on every posted event, but only on some number of events. However, it also illustrates a restriction to event wait: it’s impossible for the image that listens for events to know how many have been posted without explicitly blocking execution with event wait. This is indeed rather limiting. To poll events without blocking the current image, Fortran provides a built-in subroutine event_query, which we’ll explore in the next subsection.

Waiting for an event

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top