public void TestConcurrentDictionaryultiThreadInserts() { int counter = nThreads; ThreadPool.SetMaxThreads(nThreads, nThreads); long mem = GC.GetTotalMemory(true); var bt = new ConcurrentDictionary <string, string>(); for (int i = 0; i < nThreads; i++) { int threadNo = i; ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { for (int j = 0; j < totalItems; j++) { if (j % nThreads == threadNo) { bt.TryAdd(j.ToString(), j.ToString()); } } Interlocked.Decrement(ref counter); })); } UnitTestMultithreadedConcurrentTrieIterator.WaitThreadPoolCompletion(ref counter); var diff = GC.GetTotalMemory(true) - mem; for (int j = 0; j < totalItems; j++) { string lookup; TestHelper.assertTrue(bt.TryGetValue(j.ToString(), out lookup)); TestHelper.assertEquals(j, int.Parse(lookup)); } }
public void TestHashCollisionsRemove() { ConcurrentTrieDictionary <Object, Object> bt = new ConcurrentTrieDictionary <Object, Object>(); int count = 50000; for (int j = 0; j < count; j++) { Object[] objects = UnitTestMultithreadedConcurrentTrieIterator.getObjects(j); foreach (Object o in objects) { bt.put(o, o); } } for (int j = 0; j < count; j++) { Object[] objects = UnitTestMultithreadedConcurrentTrieIterator.getObjects(j); foreach (Object o in objects) { bt.remove(o); } } TestHelper.assertEquals(0, bt.size()); //TestHelper.assertTrue(bt.isEmpty()); }
public void TestConcurrentHashTrieMultiThreadAddDelete() { for (int j = 0; j < RETRIES; j++) { var bt = new ConcurrentTrieDictionary <Object, Object>(); { ThreadPool.SetMaxThreads(N_THREADS, N_THREADS); int counter = N_THREADS; for (int i = 0; i < N_THREADS; i++) { int threadNo = i; ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { for (int jj = 0; jj < COUNT; jj++) { if (jj % N_THREADS == threadNo) { bt.put(jj, jj); } } Interlocked.Decrement(ref counter); })); } UnitTestMultithreadedConcurrentTrieIterator.WaitThreadPoolCompletion(ref counter); TestHelper.assertEquals(COUNT, bt.size()); counter = N_THREADS; for (int i = 0; i < N_THREADS; i++) { int threadNo = i; ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { for (int jj = 0; jj < COUNT; jj++) { if (jj % N_THREADS == threadNo) { bt.remove(jj); } } Interlocked.Decrement(ref counter); })); } UnitTestMultithreadedConcurrentTrieIterator.WaitThreadPoolCompletion(ref counter); counter = N_THREADS; TestHelper.assertEquals(0, bt.size()); for (int i = 0; i < N_THREADS; i++) { int threadNo = i; ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { try { for (int jj = 0; jj < COUNT; jj++) { if (jj % N_THREADS == threadNo) { try { bt.put(jj, jj); if (!bt.containsKey(jj)) { Assert.Fail("Key j not found"); } bt.remove(jj); if (bt.containsKey(jj)) { Assert.Fail("Key jj found and should have been removed"); } } catch (Exception e) { Assert.Fail(e.Message); } } } } finally { Interlocked.Decrement(ref counter); } })); TestHelper.assertEquals(0, bt.size()); } UnitTestMultithreadedConcurrentTrieIterator.WaitThreadPoolCompletion(ref counter); } } }