예제 #1
0
        public void MtTest()
        {
            var       gen = new UlidGenTS();
            var       cl  = new ConcurrentStack <Ulid>();
            const int c   = 10_000_000;

            var t1 = new Thread(
                () =>
            {
                var l = new List <Ulid>();
                for (var i = 0; i < c; i++)
                {
                    l.Add(gen.Generate());
                }

                cl.PushRange(l.ToArray());
            }
                );
            var t2 = new Thread(
                () =>
            {
                var l = new List <Ulid>();
                for (var i = 0; i < c; i++)
                {
                    l.Add(gen.Generate());
                }

                cl.PushRange(l.ToArray());
            }
                );
            var t3 = new Thread(
                () =>
            {
                var l = new List <Ulid>();
                for (var i = 0; i < c; i++)
                {
                    l.Add(gen.Generate());
                }

                cl.PushRange(l.ToArray());
            }
                );

            t1.Start();
            t2.Start();
            t3.Start();
            t1.Join();
            t2.Join();
            t3.Join();

            cl.Count
            .ShouldBe(c * 3, "Threads PushRange failed. Maybe some threads failed execution");
            cl.Distinct()
            .Count()
            .ShouldBe(c * 3, "Some id's duplicated!");
        }
예제 #2
0
파일: Program.cs 프로젝트: cprkv/FastUlid
 public void Setup()
 {
     _myUlidGen   = new UlidGen();
     _myUlidGenTS = new UlidGenTS();
 }