Работа с переменными при многопоточности - 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++;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д