Пример #1
0
        private static void Test3()
        {
            STMObject <ValueHolder> result = new FreeObject <ValueHolder>(new ValueHolder(10));
            var system = FreeStmSystem.GetInstance();

            var t1 = new Thread(() =>
            {
                var r1 = system.Atomic(() =>
                {
                    if (result.GetValue().Value == 10)
                    {
                        Thread.Yield();
                        result.SetValue(new ValueHolder(0));
                    }
                    else
                    {
                        result.SetValue(new ValueHolder(1));
                    }
                    return(result.GetValue());
                });
                Console.WriteLine("Result: " + r1);
            });

            var t2 = new Thread(() => system.Atomic(() => result.SetValue(new ValueHolder(12))));

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

            t1.Join();
            t2.Join();
        }
Пример #2
0
 private static void Test2()
 {
     var system = FreeStmSystem.GetInstance();
     STMObject <ValueHolder> fo = new FreeObject <ValueHolder>(new ValueHolder(5));
     var result = system.Atomic(() =>
     {
         fo.SetValue(new ValueHolder(12));
         return(fo.GetValue());
     });
 }
Пример #3
0
        private static void Test1()
        {
            var system = FreeStmSystem.GetInstance();
            STMObject <ValueHolder> fo = new FreeObject <ValueHolder>(new ValueHolder(15));

            var t1 = new Thread(() =>
            {
                var result = system.Atomic(() =>
                {
                    fo.SetValue(new ValueHolder(1));
                    return(fo.GetValue());
                });
            });

            var t2 = new Thread(() =>
            {
                var result = system.Atomic(() =>
                {
                    fo.SetValue(new ValueHolder(2));
                    return(fo.GetValue());
                });
            });

            var t3 = new Thread(() =>
            {
                var result = system.Atomic(() =>
                {
                    fo.SetValue(new ValueHolder(3));
                    return(fo.GetValue());
                });
            });

            var t4 = new Thread(() =>
            {
                var result = system.Atomic(() =>
                {
                    fo.SetValue(new ValueHolder(4));
                    return(fo.GetValue());
                });
            });

            var t5 = new Thread(() =>
            {
                var result = system.Atomic(() =>
                {
                    fo.SetValue(new ValueHolder(5));
                    return(fo.GetValue());
                });
            });

            t1.Start();
            t2.Start();
            t3.Start();
            t4.Start();
            t5.Start();

            t1.Join();
            t2.Join();
            t3.Join();
            t4.Join();
            t5.Join();
        }