Beispiel #1
0
 internal V Get <V>(UserDataSlot <V> slot, V defaultValue)
 {
     using (synchronizer.AcquireReadLock())
     {
         return(slot.GetUserData(this, defaultValue));
     }
 }
        public IEnumerable <IMetricDefinition> GetMetricDefinitions()
        {
            IList <IMetricDefinition> definitions;

            using (readerWriterLock.AcquireReadLock())
                definitions = metricDefinitions.ToList();

            TryRefreshMetricDefinitions();

            return(definitions);
        }
Beispiel #3
0
        public IEnumerable <TConsumer> QueryConsumers <TConsumer>()
        {
            var result = new LinkedList <TConsumer>();

            using (_consumersLock.AcquireReadLock())
                foreach (var consumer in _consumers)
                {
                    if (consumer is TConsumer tConsumer)
                    {
                        result.AddLast(tConsumer);
                    }
                }
            return(result);
        }
Beispiel #4
0
        public IEnumerable <TFilter> QueryFilters <TFilter>()
        {
            var result = new LinkedList <TFilter>();

            using (_filtersLock.AcquireReadLock())
                foreach (var filter in _filters)
                {
                    if (filter is TFilter tFilter)
                    {
                        result.AddLast(tFilter);
                    }
                }
            return(result);
        }
Beispiel #5
0
        private List <MachineLocation> GetMachineLocations(ContentHash contentHash)
        {
            List <MachineLocation> machines = new List <MachineLocation>();

            long contentId = contentHash.LeastSignificantLong();

            using (_ringLock.AcquireReadLock())
            {
                int firstNodeIndex = FindFirstNodeIndex(contentId);
                for (int i = 0; i < Math.Min(_ring.Length, _copiesQuantity); i++)
                {
                    int currentPosition = (firstNodeIndex + i) % _ring.Length;
                    // This implementation of Consistent Hashing does not use virtual nodes
                    machines.Add(_ring[currentPosition].MachineLocation);
                }
            };

            return(machines);
        }
Beispiel #6
0
 public ReadLockHelper(ReaderWriterLockSlim rwLock)
 {
     rwLock.AcquireReadLock(-1);
     this.rwLock = rwLock;
 }