Информация об изменениях

Сообщение Re[3]: Паралелльное изменение одного объекта от 09.04.2016 19:49

Изменено 09.04.2016 19:50 LaptevVV

LVV>>Классика.
S>Что я делаю не так, почему не могу воспроизвести "классику"?

S>
S>    class Program
S>    {
S>        static void Main(string[] args)
S>        {
S>            const int iterationCount = 10000000;
S>            var car = new Car();

S>            var priceTask = Task.Run(
S>                () =>
S>                {
S>                    for (int i = 0; i < iterationCount; i++)
S>                        CalculatePrice(car);
S>                });
S>            var useTimeTask = Task.Run(
S>                () =>
S>                {
S>                    for (int i = 0; i < iterationCount; i++)
S>                        CalculateUseTime(car);
S>                });

S>            Task.WaitAll(priceTask, useTimeTask);
S>            Console.WriteLine(car.Price);
S>            Console.WriteLine(car.UseTime);
S>        }
S>        static void CalculatePrice(Car car)
S>        {
S>            car.Price += 1;
S>        }
S>        static void CalculateUseTime(Car car)
S>        {
S>            car.UseTime += 1;
S>        }
S>    }

S>    class Car
S>    {
S>        public int Price;
S>        public int UseTime;
S>    }

S>

Ну, век живи — век учись.
Это я про себя...
Re[3]: Паралелльное изменение одного объекта
LVV>>Классика.
S>Что я делаю не так, почему не могу воспроизвести "классику"?

S>
S>    class Program
S>    {
S>        static void Main(string[] args)
S>        {
S>            const int iterationCount = 10000000;
S>            var car = new Car();

S>            var priceTask = Task.Run(
S>                () =>
S>                {
S>                    for (int i = 0; i < iterationCount; i++)
S>                        CalculatePrice(car);
S>                });
S>            var useTimeTask = Task.Run(
S>                () =>
S>                {
S>                    for (int i = 0; i < iterationCount; i++)
S>                        CalculateUseTime(car);
S>                });

S>            Task.WaitAll(priceTask, useTimeTask);
S>            Console.WriteLine(car.Price);
S>            Console.WriteLine(car.UseTime);
S>        }
S>        static void CalculatePrice(Car car)
S>        {
S>            car.Price += 1;
S>        }
S>        static void CalculateUseTime(Car car)
S>        {
S>            car.UseTime += 1;
S>        }
S>    }

S>    class Car
S>    {
S>        public int Price;
S>        public int UseTime;
S>    }

S>

Ну, век живи — век учись.
Это я про себя...
Это же Додиез.
А в нем — ссылки, а не значения...