private IpcCircularBuffer(Section section, string sectionName, Semaphore readSemaphore, Semaphore writeSemaphore) { BufferHeader header; _section = section; _sectionView = section.MapView(Marshal.SizeOf(typeof(BufferHeader))); header = _sectionView.ReadStruct <BufferHeader>(); _sectionView.Dispose(); if (readSemaphore == null || writeSemaphore == null) { _readSemaphore = new Semaphore(sectionName + "_" + header.ReadSemaphoreId.ToString("x")); _writeSemaphore = new Semaphore(sectionName + "_" + header.WriteSemaphoreId.ToString("x")); } else { _readSemaphore = readSemaphore; _writeSemaphore = writeSemaphore; } _sectionView = _section.MapView(header.BlockSize * header.NumberOfBlocks); _header = (BufferHeader *)_sectionView.Memory; _data = &_header->Data; }