/
RedHead
/
Parallel_computing_systems
Обзор
Документация
Войти
/
RedHead
/
Parallel_computing_systems
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
1_1_Thread-safe counter.cs
68 строк
2 KB
RedHead
upload files
17 дек 2025, 20:45
17 дек 2025, 20:45
aaa3134
Код
Авторство
О чём код?
using System; using System.Threading; class SafeCounter { private int _count = 0; private readonly object _lockObject = new object(); // Объект для блокировки public int Count => _count; // Только для чтения, чтобы избежать некорректных чтений public void Increment() { lock (_lockObject) // Блокировка для обеспечения атомарности операции { _count++; // Операция инкремента теперь потокобезопасна } } public void Decrement() { lock (_lockObject) // Та же блокировка для согласованности { _count--; // Операция декремента также потокобезопасна } } } class Program { static void Main() { var counter = new SafeCounter(); var threads = new Thread[10]; // Создаем и запускаем 10 потоков for (int i = 0; i < 10; i++) { threads[i] = new Thread(() => { // Каждый поток выполняет 1000 инкрементов for (int j = 0; j < 1000; j++) { counter.Increment(); } }); threads[i].Start(); } // Ждем завершения всех потоков foreach (var thread in threads) { thread.Join(); } Console.WriteLine($"Ожидаемое значение: {10 * 1000}"); Console.WriteLine($"Фактическое значение: {counter.Count}"); // Проверяем корректность if (counter.Count == 10 * 1000) { Console.WriteLine("Счетчик работает корректно!"); } else { Console.WriteLine("Ошибка в работе счетчика!"); } } }