This inefficiency was introduced in the overhaul of the ck_epoch API. Synchronize is executed with respect to e. At e + 1, references can only exist to objects logically deleted at e or e + 1. At e + 2, however, references can only exist to objects logically deleted at e + 1 and e + 2. In the case that a thread observes an out of date epoch value, an increment to the global epoch would fail as the active bit is ordered with respect to the memory barrier in synchronize. In the case that a protected section begins after the memory barrier, then it is guaranteed to not acquire the hazardous reference. This does not change granularity of deferral lists, however. There is still a requirement of 3 deferral lists on the fast path (4 in ck_epoch for fast path purposes) as at any moment, any given deferral list for value e can contain references to objects with active references from both e and e - 1.ck_pring
parent
b17706f967
commit
c4849aeaae
Loading…
Reference in new issue