Sobes.tech
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 из разных потоков, что исключает состояние гонки и обеспечивает корректность данных.