The software checks the state of a resource before using that resource,
but the resource's state can change between the check and the use in a
way that invalidates the results of the check. This can cause the
software to perform invalid actions when the resource is in an
unexpected state.