A technique for realtime-safe detection of a grace period for deferring
the destruction of a shared data element until pre-existing references to
the data element have been removed. A pair of counters is established for
each of one or more processors. A global counter selector determines
which counter of each per-processor counter pair is a current counter.
When reading a shared data element at a processor, the processor's
current counter is incremented. Following counter incrementation, the
processor's counter pair is tested for reversal to ensure that the
incremented counter is still the current counter. If a counter reversal
has occurred, such that the incremented counter is no longer current, the
processor's other counter is incremented. Following referencing of the
shared data element, any counter that remains incremented is decremented.
Following an update to the shared data element wherein a pre-update
version of the element is maintained, the global counter selector is
switched to establish a new current counter of each per-processor counter
pair. The non-current counter of each per-processor counter pair is
tested for zero. The shared data element's pre-update version is
destroyed upon the non-current counter of each per-processor counter pair
being zero.