Back to questions
Junior — Middle
65
Какими способами вы использовали для обеспечения безопасной работы потоков при одновременном выполнении задач?
Answer from AI
sobes.tech AI
Для обеспечения безопасной работы потоков при одновременном выполнении задач в C# применяются различные механизмы синхронизации и управления доступом к общим ресурсам:
- lock — блокировка критической секции кода, чтобы только один поток мог выполнять её одновременно.
- Mutex — межпроцессная блокировка, полезна при работе с ресурсами, доступными из разных процессов.
- Semaphore и SemaphoreSlim — ограничивают количество потоков, которые могут одновременно получить доступ к ресурсу.
- Monitor — более гибкий механизм блокировки, позволяющий ожидать и сигнализировать о событиях.
- Concurrent коллекции (например,
ConcurrentDictionary,ConcurrentQueue) — обеспечивают потокобезопасный доступ к коллекциям. - Interlocked — атомарные операции над переменными для предотвращения гонок.
Пример использования lock:
private readonly object _lockObj = new object();
private int _counter = 0;
public void Increment()
{
lock(_lockObj)
{
_counter++;
}
}
Такой подход предотвращает одновременное изменение _counter из разных потоков, что исключает состояние гонки и обеспечивает корректность данных.