Beispiel #1
0
        /// <summary>
        /// Gets the unmanaged atomic reference.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="initialValue">The initial value.</param>
        /// <param name="create">Create flag.</param>
        /// <returns>Unmanaged atomic reference, or null.</returns>
        private IUnmanagedTarget GetAtomicReferenceUnmanaged <T>(string name, T initialValue, bool create)
        {
            IgniteArgumentCheck.NotNullOrEmpty(name, "name");

            // Do not allocate memory when default is not used.
            if (!create)
            {
                return(UU.ProcessorAtomicReference(_proc, name, 0, false));
            }

            using (var stream = IgniteManager.Memory.Allocate().GetStream())
            {
                var writer = Marshaller.StartMarshal(stream);

                writer.Write(initialValue);

                var memPtr = stream.SynchronizeOutput();

                return(UU.ProcessorAtomicReference(_proc, name, memPtr, true));
            }
        }