Junior — Middle
Bir vaqtning o'zida ishlayotgan oqimlar orasidagi nizolarni oldini olish uchun qanday vositalardan foydalanasiz?
sobes.tech AI
AIdan javob
Для предотвращения конфликтов при одновременной работе потоков в C# используют различные механизмы синхронизации:
- lock — простой способ блокировки критической секции кода.
- Mutex — межпроцессный мьютекс для синхронизации между процессами.
- Semaphore / SemaphoreSlim — ограничивает количество потоков, одновременно выполняющих код.
- Monitor — более гибкий механизм блокировки, на котором основан lock.
- Concurrent коллекции (например, ConcurrentDictionary) — коллекции, безопасные для многопоточного доступа.
- Interlocked — атомарные операции над переменными.
Пример использования lock:
private readonly object _lockObj = new object();
void IncrementCounter() {
lock(_lockObj) {
counter++;
}
}
Такой подход предотвращает одновременный доступ к переменной counter и исключает состояние гонки.