Поделиться через


Блокировка и разблокировка указателей потока

Каждый указатель потока поддерживает состояние блокировки: заблокировано или разблокировано.

Указатели заблокированного потока гарантированно ссылаются на данные в очереди. Кадры данных, на которые указывают заблокированные указатели потока, нельзя отменить. Таким образом, мини-накопители должны свести к минимуму время, затрачивается на удержание заблокированных указателей потока.

Незащищенный указатель потока не гарантирует, что он будет ссылаться на кадр данных в очереди. Удерживая разблокированный указатель потока, мини-диск может сохранить указатель на данные, но по-прежнему позволить отменить кадр.

Можно получить доступ к данным, на которые указывает разблокировка потока. Если подпрограмма CancelCallback , предоставляемая в KsStreamPointerClone , вызывает KsStreamPointerDelete, необходимо синхронизировать CancelCallback и любой доступ к данным, который она выполняет. Мини-driver должен гарантировать, что подпрограмма обратного вызова отмены не удаляет указатель потока, пока его использует другой поток.

Если подпрограмма обратного вызова отмены не вызывает KsStreamPointerDelete, синхронизация может не потребоваться.

Чтобы заблокировать указатель потока, вызовите KsStreamPointerLock. Чтобы разблокировать указатель потока, вызовите KsStreamPointerUnlock.

При отмене IRP AVStream вызывает обратные вызовы отмены для всех разблокированных указателей потока, указывающих на кадры внутри IRP.

Разблокируйте указатели на начальный и конечный пограничный поток, только если они не используются.