This data structure is optimized for non-blocking reads even when write operations occur.
Running read iterators will not be affected by add operations since writes always insert at the head of the
structure. Remove operations can affect any running iterator such that a removed element that has not yet
been reached by the iterator will not appear in that iterator anymore.
The structure uses weak references to the elements. Iterators automatically perform cleanups of
garbage collected objects during iteration -> no dedicated maintenance operations need to be called or run in background.