Работа с переменными при многопоточности - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Недавно начал работать с много поточностью и при работе с большими ресурсами (такие как List) я использую конструкцию "lock*(threadLock)". С этим всё понятно но сегодня я провёл эксперимент. Создал одну int переменную и 11 потоков. 10 потоков одновременно записывает туда свои значение а 11-тый поток считывает и выводит всё на экран. Как я понял с такими цельными значениями как int, bool не произойдёт того что один потом считывает первый байт а второй поток исправляет третий быйт, и значения всегда останутся такими какие должны быть. (значения цельные). Вопрос: 1) Правильно я понял что это нормальное явление, и C# не вылетит с какой либо ошибкой при долгой работе? 2) Можно в практике использовать такой подход что при чтение или изменение простых переменных (int, bool) не использовать конструкцию Lock (о то она всё же кушает ресурсы)?

Решение задачи: «Работа с переменными при многопоточности»

textual
Листинг программы
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace ConsoleApplication221
  5. {
  6.     class Program
  7.     {
  8.         static int counter;
  9.  
  10.         static void Main(string[] args)
  11.         {
  12.             //запускаем 10 потоков
  13.             for (int i = 0; i < 10; i++)
  14.                 new Thread(Work).Start();
  15.  
  16.             //ждем отработки всех потоков
  17.             Thread.Sleep(1000);
  18.  
  19.             //смотрим переменную counter. Она должна быть 10 000 000
  20.             Console.WriteLine(counter);//упс...
  21.             Console.ReadLine();
  22.         }
  23.  
  24.         private static void Work()
  25.         {
  26.             //увеличиваем counter миллион раз
  27.             for (int i = 0; i < 1000000; i++)
  28.                 counter++;
  29.         }
  30.     }
  31. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы