예제 #1
0
        /// <summary>
        /// Tries to open a shared memory map.
        /// </summary>
        /// <param name="globalMemoryRegion"></param>
        /// <param name="memoryRegionId"></param>
        /// <param name="sharedMemoryMapView"></param>
        /// <returns></returns>
        public static bool TryOpenExisting(
            this GlobalMemoryRegion globalMemoryRegion,
            MlosInternal.MemoryRegionId memoryRegionId,
            out SharedMemoryMapView sharedMemoryMapView)
        {
            MlosInternal.RegisteredMemoryRegionConfig.CodegenKey registeredMemoryLookupKey = default;
            registeredMemoryLookupKey.MemoryRegionId = memoryRegionId;

            // Locate shared memory region config.
            //
            SharedConfig <MlosProxyInternal.RegisteredMemoryRegionConfig> registeredMemoryRegionSharedConfig =
                SharedConfigManager.Lookup(globalMemoryRegion.SharedConfigDictionary, registeredMemoryLookupKey);

            if (!registeredMemoryRegionSharedConfig.HasSharedConfig)
            {
                sharedMemoryMapView = null;
                return(false);
            }

            // Config exists, create a shared config memory region.
            //
            MlosProxyInternal.RegisteredMemoryRegionConfig registeredMemoryRegionConfig = registeredMemoryRegionSharedConfig.Config;

            sharedMemoryMapView = SharedMemoryMapView.OpenExisting(
                registeredMemoryRegionConfig.MemoryMapName.Value,
                registeredMemoryRegionConfig.MemoryRegionSize);

            return(true);
        }
예제 #2
0
        /// <summary>
        /// Register shared config memory region.
        /// </summary>
        /// <param name="sharedMemoryRegionIndex">Index of the shared memory region.</param>
        private void RegisterSharedConfigMemoryRegion(uint sharedMemoryRegionIndex)
        {
            MlosInternal.RegisteredMemoryRegionConfig.CodegenKey codegenKey = default;
            codegenKey.MemoryRegionIndex = sharedMemoryRegionIndex;

            // Locate shared memory region config.
            //
            SharedConfig <RegisteredMemoryRegionConfig> registeredMemoryRegionSharedConfig =
                SharedConfigManager.Lookup(mlosContext.GlobalMemoryRegion.SharedConfigDictionary, codegenKey);

            if (registeredMemoryRegionSharedConfig.HasSharedConfig)
            {
                // Config exists, register memory region with the shared config manager.
                //
                RegisteredMemoryRegionConfig registeredMemoryRegionConfig = registeredMemoryRegionSharedConfig.Config;

                mlosContext.SharedConfigManager.RegisterSharedConfigMemoryRegion(
                    memoryRegionId: registeredMemoryRegionConfig.MemoryRegionIndex,
                    sharedMemoryMapName: registeredMemoryRegionConfig.SharedMemoryMapName.Value,
                    memoryRegionSize: registeredMemoryRegionConfig.MemoryRegionSize);
            }
        }