public void AsyncLockFreeDictionaryIntItShouldBePossibleToDisposeEnumeratorsConcurrently()
        {
            var dict = new AsyncLockFreeDictionary <string, string>();

            dict.Add("1", "v1");
            dict.Add("2", "v2");
            dict.Add("3", "v3");

            Thread.Sleep(100);

            var enumerator1 = dict.GetEnumerator();
            var enumerator2 = dict.GetEnumerator();

            enumerator1.MoveNext();
            enumerator2.MoveNext();

            enumerator2.Dispose();

            var current = enumerator1.Current;

            Assert.AreEqual("v1", current.Value);

            dict.Remove("2");

            Thread.Sleep(100);

            enumerator1.MoveNext();
            current = enumerator1.Current;
            Assert.AreEqual("v3", current.Value);
        }
        // ReSharper disable once UnusedParameter.Local
        private TestThread CreateRemoveThread(int mainCounter, ManualResetEvent signal)
        {
            var tt = TestThread.Start(th =>
            {
                for (int i = 0; i < 10; i++)
                {
                    _dict.Remove("" + i);
                    _removed++;
                }
                return(true);
            }, signal);

            return(tt);
        }
Exemple #3
0
        public void LockFreeDictionaryRemoveKeyValuePair()
        {
            var dict = new AsyncLockFreeDictionary <int, int>();

            Thread.Sleep(100);
            dict.Add(1, 1);
            dict.Add(2, 2);
            dict.Add(3, 3);
            dict.Add(4, 4);
            dict.Add(5, 5);
            Thread.Sleep(100);

            dict.Remove(new KeyValuePair <int, int>(4, 0));
            Thread.Sleep(100);

            Assert.AreEqual(4, dict.Count);


            Assert.IsTrue(dict.ContainsKey(1));
            Assert.IsTrue(dict.ContainsKey(2));
            Assert.IsTrue(dict.ContainsKey(3));
            Assert.IsTrue(dict.ContainsKey(5));
        }