Встречается на собеседованиях • сегодня

Как бороться с состоянием гонки (Race condition) в многопоточности

В Python для борьбы с race condition используют механизмы синхронизации:

  1. Lock (блокировки) - базовый примитив:
python
from threading import Lock

lock = Lock()
shared_var = 0

def increment():
    global shared_var
    with lock:
        shared_var += 1
  1. RLock (реентерабельные блокировки) - позволяют одному потоку захватывать блокировку несколько раз.

  2. Semaphore - ограничивает количество потоков, которые могут получить доступ к ресурсу.

  3. Event - механизм для оповещения между потоками.

  4. Condition - более сложный механизм для координации потоков.

Для работы с shared данными в multiprocessing лучше использовать:

  • multiprocessing.Queue
  • multiprocessing.Value/Array
  • multiprocessing.Manager

Важно минимизировать время удержания блокировки и избегать deadlock'ов (взаимных блокировок). В некоторых случаях лучше использовать thread-safe структуры из queue модуля.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы