ExitUpgradeableReadLock() public method

public ExitUpgradeableReadLock ( ) : void
return void
Ejemplo n.º 1
0
        public int RemoveAll(Predicate <TValue> predicate)
        {
            IList <TKey1> list = new List <TKey1>();

            rwLock.EnterUpgradeableReadLock();

            try
            {
                foreach (KeyValuePair <TKey1, TValue> kvp in Dictionary1)
                {
                    if (predicate(kvp.Value))
                    {
                        list.Add(kvp.Key);
                    }
                }

                IList <TKey2> list2 = new List <TKey2>(list.Count);
                foreach (KeyValuePair <TKey2, TValue> kvp in Dictionary2)
                {
                    if (predicate(kvp.Value))
                    {
                        list2.Add(kvp.Key);
                    }
                }

                rwLock.EnterWriteLock();

                try
                {
                    for (int i = 0; i < list.Count; i++)
                    {
                        Dictionary1.Remove(list[i]);
                    }

                    for (int i = 0; i < list2.Count; i++)
                    {
                        Dictionary2.Remove(list2[i]);
                    }
                }
                finally { rwLock.ExitWriteLock(); }
            }
            finally { rwLock.ExitUpgradeableReadLock(); }

            return(list.Count);
        }
        public int RemoveAll(Predicate <TValue> predicate)
        {
            IList <TKey1> list = new List <TKey1>();

            _rwLock.EnterUpgradeableReadLock();

            try
            {
                foreach (var kvp in _dictionary1)
                {
                    if (predicate(kvp.Value))
                    {
                        list.Add(kvp.Key);
                    }
                }

                IList <TKey2> list2 = new List <TKey2>(list.Count);
                foreach (var kvp in _dictionary2)
                {
                    if (predicate(kvp.Value))
                    {
                        list2.Add(kvp.Key);
                    }
                }

                _rwLock.EnterWriteLock();

                try
                {
                    foreach (var t in list)
                    {
                        _dictionary1.Remove(t);
                    }

                    foreach (var t in list2)
                    {
                        _dictionary2.Remove(t);
                    }
                }
                finally { _rwLock.ExitWriteLock(); }
            }
            finally { _rwLock.ExitUpgradeableReadLock(); }

            return(list.Count);
        }