Suspend Left Right
constructor(constructor: () -> T, readerParallelism: Int = readerParallelism(), switch: AtomicBoolean = atomic(LEFT), allEpochs: Array<CacheAlignedCounter> = Array(readerParallelism) { counter(0) }, readEpochCount: AtomicInt = atomic(0), readEpochIdx: ReadEpochIndex = readEpochIndex { readEpochCount.getAndIncrement() }, left: T = constructor(), right: T = constructor(), writeMutex: Mutex = Mutex())