internal static void AddSequences <T>( T holder , _Volatile.AtomicReference <Sequence[]> sequenceUpdater , ICursored cursor , params Sequence[] sequencesToAdd) { long cursorSequence; Sequence[] currentSequences; Sequence[] updatedSequences; //var casSequence = new T[1] { holder } as Sequence[]; do { //currentSequences = sequenceUpdater.ReadUnfenced(); currentSequences = sequenceUpdater.ReadCompilerOnlyFence(); updatedSequences = Util.CopyToNewArray(currentSequences , currentSequences.Length + sequencesToAdd.Length); cursorSequence = cursor.GetCursor; int index = currentSequences.Length; foreach (Sequence sequence in sequencesToAdd) { sequence.LazySet(cursorSequence); updatedSequences[index++] = sequence; } }while(!sequenceUpdater.AtomicCompareExchange(updatedSequences, currentSequences)); cursorSequence = cursor.GetCursor; foreach (Sequence sequence in sequencesToAdd) { sequence.LazySet(cursorSequence); } }