Вы блокируете фильтр (он не является специфичным для фильтра, он применяется к любому объекту в многопоточной среде), чтобы обеспечить атомарную работу. Обычно это доступ к данным или сериализация действий.
Например, класс CTransformFilter
имеет две критические секции: m_csFilter
и m_csReceive
.
m_csFilter
защищает состояние данных, чтобы гарантировать, что пока один поток что-то меняет, другие потоки не касаются одних и тех же данных одновременно. Другой, m_csReceive
используется для сериализации событий приема и окончания потока.
Вам нужно заблокировать состояние фильтра, когда вам нужно, чтобы ваши операции не прерывались действием в параллельном потоке. Поскольку ваша блокировка может задержать другие потоки, ожидается, что вы будете удерживать блокировку минимальное время, чтобы как можно меньше влиять на выполнение в других потоках.