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

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

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

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

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

textual
Листинг программы
using System;
using System.Threading;
 
namespace ConsoleApplication221
{
    class Program
    {
        static int counter;
 
        static void Main(string[] args)
        {
            //запускаем 10 потоков
            for (int i = 0; i < 10; i++)
                new Thread(Work).Start();
 
            //ждем отработки всех потоков
            Thread.Sleep(1000);
 
            //смотрим переменную counter. Она должна быть 10 000 000
            Console.WriteLine(counter);//упс...
            Console.ReadLine();
        }
 
        private static void Work()
        {
            //увеличиваем counter миллион раз
            for (int i = 0; i < 1000000; i++)
                counter++;
        }
    }
}

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


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

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

7   голосов , оценка 4 из 5
Похожие ответы