Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: changing RA Table

...

To guarantee safety, programs must test the while loop condition after returning from the wait() method. Although wait() is intended to block indefinitely until a notification is received, it must still be encased within a loop to prevent the following vulnerabilities [Bloch 2001]:

  • Thread in the middle ���������€š�š�š�š���������‚�š�š�š�����������‚�š�š�š�š����������€š�š�š�š�? A third thread can acquire the lock on the shared object during the interval between a notification being sent and the receiving thread resuming execution. This third thread can change the state of the object, leaving it inconsistent. This is a TOCTOU race condition.
  • Malicious notification ���������€š�š�š�š���������‚�š�š�š�����������‚�š�š�š�š����������€š�š�š�š�? A random or malicious notification can be received when the condition predicate is false. Such a notification would cancel the wait().
  • Misdelivered notification ���������€š�š�š�š���������‚�š�š�š�����������‚�š�š�š�š����������€š�š�š�š�? The order in which threads execute after receipt of a notifyAll() signal is unspecified. Consequently, an unrelated thread could start executing and discover that its condition predicate is satisfied. Consequently, it could resume execution, although it was required to remain dormant.
  • Spurious wakeups ���������€š�š�š�š���������‚�š�š�š�����������‚�š�š�š�š����������€š�š�š�š�? Certain JVM implementations are vulnerable to spurious wakeups that result in waiting threads waking up even without a notification [API 2006].

...