Example #1
0
 public virtual void Test()
 {
     Assert.AreEqual(0, l.GetAndAdd(2));
     Assert.AreEqual(2, l.Get());
     l.Set(5);
     Assert.AreEqual(5, l.Get());
     Assert.AreEqual(8, l.AddAndGet(3));
     Assert.IsFalse(l.CompareAndSet(7, 4));
     Assert.AreEqual(8, l.Get());
     Assert.IsTrue(l.CompareAndSet(8, 4));
     Assert.AreEqual(4, l.Get());
     Assert.AreEqual(3, l.DecrementAndGet());
     Assert.AreEqual(3, l.GetAndIncrement());
     Assert.AreEqual(4, l.GetAndSet(9));
     Assert.AreEqual(10, l.IncrementAndGet());
 }
Example #2
0
        public virtual bool Init(long id)
        {
            if (id <= 0)
            {
                return(false);
            }
            var step = (id / BlockSize);

            lock (this)
            {
                var init = _atomicLong.CompareAndSet(0, step + 1);
                if (init)
                {
                    _local.Set(step);
                    _residue.Set((int)(id % BlockSize) + 1);
                }
                return(init);
            }
        }