Exemplo n.º 1
0
        public override bool Remove(K key)
        {
            var notCommitted = true;
            var result       = false;

            while (notCommitted)
            {
                var transaction = JVTransaction.Start();
                var bucketIndex = GetBucketIndex(transaction, key);
                var bucketVar   = _buckets.Read(transaction)[bucketIndex];
                var node        = FindNode(key, bucketVar.Read(transaction));

                if (node != null)
                {
                    //If node is not found key does not exist so insert
                    bucketVar.Put(transaction, bucketVar.Read(transaction).Remove(node));
                    //_size.Commute(transaction, i => i - 1);
                    _size.Put(transaction, _size.Read(transaction) - 1);
                    result = true;
                }
                else
                {
                    result = false;
                }

                notCommitted = !transaction.Commit();
            }

            return(result);
        }
Exemplo n.º 2
0
        public override void Add(K key, V value)
        {
            var notCommitted = true;

            while (notCommitted)
            {
                var transaction = JVTransaction.Start();
                var bucketIndex = GetBucketIndex(transaction, key);
                var bucketVar   = _buckets.Read(transaction)[bucketIndex];
                var node        = FindNode(key, bucketVar.Read(transaction));

                if (node != null)
                {
                    //If node is not null key exist in map. Update the value
                    node.Value.Put(transaction, value);
                }
                else
                {
                    //Else insert the node
                    bucketVar.Put(transaction, bucketVar.Read(transaction).Add(CreateNode(key, value)));
                    //_size.Commute(transaction, i => i + 1);
                    _size.Put(transaction, _size.Read(transaction) + 1);
                    ResizeIfNeeded(transaction);
                }

                notCommitted = !transaction.Commit();
            }
        }
Exemplo n.º 3
0
        public override bool AddIfAbsent(K key, V value)
        {
            var notCommitted = true;
            var result       = false;

            while (notCommitted)
            {
                var transaction = JVTransaction.Start();
                var bucketIndex = GetBucketIndex(transaction, key);
                var bucketVar   = _buckets.Read(transaction)[bucketIndex];
                var node        = FindNode(key, bucketVar.Read(transaction));

                if (node == null)
                {
                    //If node is not found key does not exist so insert
                    bucketVar.Put(transaction, bucketVar.Read(transaction).Add(CreateNode(key, value)));
                    //_size.Commute(transaction,i => i + 1);
                    _size.Put(transaction, _size.Read(transaction) + 1);
                    ResizeIfNeeded(transaction);
                    result = true;
                }
                else
                {
                    result = false;
                }

                notCommitted = !transaction.Commit();
            }

            return(result);
        }
        public override IEnumerator <KeyValuePair <K, V> > GetEnumerator()
        {
            var notCommitted = true;
            IEnumerator <KeyValuePair <K, V> > result = null;

            while (notCommitted)
            {
                var transaction = JVTransaction.Start();
                var list        = new List <KeyValuePair <K, V> >(_size.Read(transaction));
                for (var i = 0; i < _buckets.Read(transaction).Length; i++)
                {
                    var bucket = _buckets.Read(transaction)[i];
                    var node   = bucket.Read(transaction);
                    while (node != null)
                    {
                        list.Add(new KeyValuePair <K, V>(node.Key, node.Value.Read(transaction)));
                        node = node.Next.Read(transaction);
                    }
                }
                result = list.GetEnumerator();

                notCommitted = !transaction.Commit();
            }

            return(result);
        }
        public override bool ContainsKey(K key)
        {
            JVTransaction transaction;
            bool          result;

            do
            {
                transaction = JVTransaction.Start();
                result      = FindNode(transaction, key) != null;
            } while (!transaction.Commit());

            return(result);
        }
Exemplo n.º 6
0
        public override bool ContainsKey(K key)
        {
            var  notCommitted = true;
            Node node         = null;

            while (notCommitted)
            {
                var transaction = JVTransaction.Start();
                node         = FindNode(transaction, key);
                notCommitted = !transaction.Commit();
            }

            return(node != null);
        }
Exemplo n.º 7
0
        private static void JVTest()
        {
            var box1        = new VBox <string>("a");
            var box2        = new VBox <bool>(false);
            var notCommited = true;

            while (notCommited)
            {
                var transaction = JVTransaction.Start();
                box1.Put(transaction, "Hello world");
                var b2Value = box2.Read(transaction);
                notCommited = !transaction.Commit();
            }
        }
        public override bool Remove(K key)
        {
            JVTransaction transaction;
            bool          result;

            do
            {
                transaction = JVTransaction.Start();
                var bucketIndex = GetBucketIndex(transaction, key);
                var bucketVar   = _buckets.Read(transaction)[bucketIndex];
                var firstNode   = bucketVar.Read(transaction);

                result = RemoveNode(transaction, key, firstNode, bucketVar);
            } while (!transaction.Commit());

            return(result);
        }
Exemplo n.º 9
0
        private static int JVConcurrentTestInternal()
        {
            var box = new VBox <int>(10);

            var t1 = new Thread(() =>
            {
                var notCommited = true;
                while (notCommited)
                {
                    var transaction = JVTransaction.Start();
                    if (box.Read(transaction) == 10)
                    {
                        box.Put(transaction, box.Read(transaction) * 10);
                    }
                    else
                    {
                        box.Put(transaction, 5);
                    }
                    notCommited = !transaction.Commit();
                }
            });

            var t2 = new Thread(() =>
            {
                var notCommited = true;
                while (notCommited)
                {
                    var transaction = JVTransaction.Start();
                    box.Put(transaction, 12);
                    notCommited = !transaction.Commit();
                }
            });

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

            t1.Join();
            t2.Join();
            var t      = JVTransaction.Start();
            var result = box.Read(t);

            t.Commit();

            return(result);
        }
Exemplo n.º 10
0
        public override V Get(K key)
        {
            JVTransaction transaction;
            V             result;

            do
            {
                transaction = JVTransaction.Start();
                var node = FindNode(transaction, key);
                if (node == null)
                {
                    throw new KeyNotFoundException("Key not found. Key: " + key);
                }
                result = node.Value.Read(transaction);;
            } while (!transaction.Commit());

            return(result);
        }
Exemplo n.º 11
0
        public override V Get(K key)
        {
            var notCommitted = true;
            var value        = default(V);

            while (notCommitted)
            {
                var transaction = JVTransaction.Start();
                var node        = FindNode(transaction, key);
                if (node == null)
                {
                    throw new KeyNotFoundException("Key not found. Key: " + key);
                }
                value        = node.Value.Read(transaction);
                notCommitted = !transaction.Commit();
            }

            return(value);
        }
Exemplo n.º 12
0
        private static void JVSpeedTest()
        {
            var b   = new VBox <bool>();
            var tmb = new TMVar <bool>();

            var sw = Stopwatch.StartNew();

            for (int i = 0; i < 10000; i++)
            {
                bool notCommitted = true;
                while (notCommitted)
                {
                    var t = JVTransaction.Start();
                    b.Put(t, !b.Read(t));
                    notCommitted = !t.Commit();
                }
            }

            sw.Stop();

            Console.WriteLine("Non system time: " + sw.ElapsedMilliseconds);


            sw = Stopwatch.StartNew();
            for (int i = 0; i < 10000; i++)
            {
                JVSTMSystem.Atomic((t) =>
                {
                    if (b.Read(t))
                    {
                        b.Put(t, false);
                    }
                    else
                    {
                        b.Put(t, true);
                    }
                });
            }

            sw.Stop();

            Console.WriteLine("System time: " + sw.ElapsedMilliseconds);


            sw = Stopwatch.StartNew();
            for (int i = 0; i < 10000; i++)
            {
                STMSystem.Atomic(() =>
                {
                    if (tmb.Value)
                    {
                        tmb.Value = false;
                    }
                    else
                    {
                        tmb.Value = true;
                    }
                });
            }
            sw.Stop();

            Console.WriteLine("TL2 time: " + sw.ElapsedMilliseconds);
        }