예제 #1
0
        public void GarbageCollection()
        {
            JVSTMSystem.StartGC();
            var box1 = new VBox <int>(0);

            for (var i = 0; i < 100; i++)
            {
                JVSTMSystem.Atomic(t =>
                {
                    box1.Put(t, i);
                });
            }

            var box2 = new VBox <int>(0);

            for (var i = 0; i < 100; i++)
            {
                JVSTMSystem.Atomic(t =>
                {
                    box2.Put(t, i);
                });
            }


            Thread.Sleep(10);
            Assert.AreEqual(1, box1.GetNrBodies());
            Assert.AreEqual(1, box2.GetNrBodies());
        }
예제 #2
0
        private static void Main(string[] args)
        {
            using (var resultWriter = new ResultWriter())
            {
                const int eatCount = 2000;

                /*
                 * var dining = new DiningPhilosophers(eatCount);
                 * TestRunner.RunTest("STM dining", dining, resultWriter);
                 *
                 * var lockDining = new LockingDiningPhilosophers(eatCount);
                 * TestRunner.RunTest("Locking dining", lockDining, resultWriter);
                 *
                 * JVSTMSystem.StartGC();
                 * var jvDining = new JVDining(eatCount);
                 * TestRunner.RunTest("JV dining", jvDining, resultWriter);
                 * JVSTMSystem.StopGC();
                 *
                 * //const int nrOfThreads = 16;
                 * //const int updatePercent = 4;
                 * const int amountOfMappings = 4096;
                 * const int amountOfOperations = 100000;
                 *
                 * var updatePercentages = new int[] { 1, 8, 16};
                 *
                 * for (int i = 1; i <= 16; i = i * 2)
                 * {
                 *  var nrOfThreads = i;
                 *  for (int j = 0; j < updatePercentages.Length; j++)
                 *  {
                 *      var updatePercent = updatePercentages[j];
                 *
                 *      resultWriter.WriteUpdatePercentage(updatePercent);
                 *      resultWriter.WriteNrThreads(nrOfThreads);
                 *      var hashMapInternalList = new HashmapTester(
                 *          new STMHashMapInternalList<int, int>(), nrOfThreads, updatePercent, amountOfMappings,
                 *          amountOfOperations);
                 *      TestRunner.RunTest("STM hashmap", hashMapInternalList, resultWriter);
                 *
                 *
                 *      resultWriter.WriteUpdatePercentage(updatePercent);
                 *      resultWriter.WriteNrThreads(nrOfThreads);
                 *      JVSTMSystem.StartGC();
                 *      var jvstmHashMap = new HashmapTester(
                 *          new JVSTMHashMapInternalList<int, int>(), nrOfThreads, updatePercent, amountOfMappings,
                 *          amountOfOperations);
                 *      TestRunner.RunTest("JVSTM hashmap", jvstmHashMap, resultWriter);
                 *      JVSTMSystem.StopGC();
                 *
                 *      resultWriter.WriteUpdatePercentage(updatePercent);
                 *      resultWriter.WriteNrThreads(nrOfThreads);
                 *      var lockingHashmap = new HashmapTester(
                 *          new LockingHashMap<int, int>(), nrOfThreads, updatePercent, amountOfMappings,
                 *          amountOfOperations);
                 *      TestRunner.RunTest("Locking hashmap", lockingHashmap, resultWriter);
                 *
                 *      resultWriter.WriteUpdatePercentage(updatePercent);
                 *      resultWriter.WriteNrThreads(nrOfThreads);
                 *      var lockingDictionary = new HashmapTester(
                 *          new InstrumentedDictionary<int, int>(), nrOfThreads, updatePercent, amountOfMappings,
                 *          amountOfOperations);
                 *      TestRunner.RunTest("Locking dictionary", lockingDictionary, resultWriter);
                 *
                 *      resultWriter.Flush();
                 *      GC.Collect();
                 *  }
                 * }*/

                const int nrItems = 100000;
                JVSTMSystem.StartGC();
                for (int i = 1; i <= 8; i = i * 2)
                {
                    var nrOfThreads = i;

                    /*
                     * resultWriter.WriteNrThreads(nrOfThreads);
                     * var lockQueue = new IQueueTester(
                     * new Evaluation.Locking.Collections.Queue<int>(), nrItems, nrOfThreads,
                     * nrOfThreads);
                     * TestRunner.RunTest("Locking queue", lockQueue, resultWriter);
                     *
                     * resultWriter.WriteNrThreads(nrOfThreads);
                     * var lockFreeQueue = new IQueueTester(
                     *  new MSQueue<int>(), nrItems, nrOfThreads,
                     *  nrOfThreads);
                     * TestRunner.RunTest("Lock-free queue", lockFreeQueue, resultWriter);
                     *
                     * resultWriter.WriteNrThreads(nrOfThreads);
                     * var stmQueue = new STMQueueTester(
                     *  new Evaluation.Library.Collections.Queue<int>(), nrItems, nrOfThreads,
                     *  nrOfThreads);
                     * TestRunner.RunTest("STM queue", stmQueue, resultWriter);
                     */
                    resultWriter.WriteNrThreads(nrOfThreads);

                    var jvstmQueue = new STMQueueTester(
                        new Evaluation.Library.Collections.JVSTMQueue <int>(), nrItems, nrOfThreads,
                        nrOfThreads);
                    TestRunner.RunTest("JVSTM queue", jvstmQueue, resultWriter);

                    resultWriter.Flush();
                }

                JVSTMSystem.StopGC();
            }

            Console.WriteLine("Done");
        }
예제 #3
0
        static void Main(string[] args)
        {
            //Test1();
            //Test2();
            //Test3();
            //Test4();
            //TestRetry();
            //TestRetry2();
            //SingleItemBufferTest();
            //QueueTest();
            //AtomicLockTest();
            //DinningPhilosophersTest();
            //OrElseNestingTest();
            //OrElseTest();
            //OrElseNestingTest2();
            //OrElseNestingTest3();
            //var dining = new DiningPhilosopher();
            //dining.Start();
            //TestMSQueue();

            //JVSpeedTest();
            //JVSpeedTest();

            //var dinning = new JVDining();
            //dinning.Start();

            //JVTest();
            //JVConcurrentTest();

            /*
             * for (int j = 0; j < 100; j++)
             * {
             *  var result = new VBox<int>(0);
             *
             *  var t1 = new Thread(() =>
             *  {
             *      for (int i = 0; i < 1000; i++)
             *      {
             *          JVSTMSystem.Atomic((transaction) =>
             *          {
             *              result.Put(transaction, result.Read(transaction) + 1);
             *          });
             *      }
             *
             *
             *  });
             *
             *  var t2 = new Thread(() =>
             *  {
             *      for (int i = 0; i < 1000; i++)
             *      {
             *          JVSTMSystem.Atomic((transaction) =>
             *          {
             *              result.Put(transaction, result.Read(transaction) + 1);
             *          });
             *      }
             *
             *  });
             *
             *  t1.Start();
             *  t2.Start();
             *
             *  t1.Join();
             *  t2.Join();
             *
             *  var res = JVSTMSystem.Atomic((transaction) => result.Read(transaction));
             *  if (res != 2000)
             *  {
             *      Console.WriteLine("Error: " + res);
             *  }
             * }*/

            JVSTMSystem.StartGC();
            var result = new VBox <int>(0);

            var t1 = new Thread(() =>
            {
                for (int i = 0; i < 1000; i++)
                {
                    JVSTMSystem.Atomic((transaction) =>
                    {
                        result.Put(transaction, result.Read(transaction) + 1);
                    });
                }
            });

            var t2 = new Thread(() =>
            {
                for (int i = 0; i < 1000; i++)
                {
                    JVSTMSystem.Atomic((transaction) =>
                    {
                        result.Put(transaction, result.Read(transaction) + 1);
                    });
                }
            });

            t1.Start();
            t2.Start();

            t1.Join();
            t2.Join();
            Thread.Sleep(10);
            Console.WriteLine(result.GetNrBodies());
            Console.WriteLine("Done");
            Console.ReadKey();
        }