Compartilhar via


Método ICLRSyncManager::CreateRWLockOwnerIterator

Solicita que o CLR (Common Language Runtime) crie um iterador para o host usar para determinar o conjunto de tarefas aguardando um bloqueio de leitor-gravador.

Sintaxe

HRESULT CreateRWLockOwnerIterator (  
    [in]  SIZE_T    cookie,  
    [out] SIZE_T   *pIterator  
);  

Parâmetros

cookie
[in] O cookie associado ao bloqueio leitor-gravador desejado.

pIterator
[out] Um ponteiro para um iterador que pode ser passado para os métodos GetRWLockOwnerNext e DeleteRWLockOwnerIterator.

Valor Retornado

HRESULT Descrição
S_OK CreateRWLockOwnerIterator retornado com êxito.
HOST_E_CLRNOTAVAILABLE O CLR não foi carregado em um processo, ou o CLR está em um estado no qual não pode executar código gerenciado ou processar a chamada com êxito.
HOST_E_TIMEOUT Uma chamada atingiu o tempo limite.
HOST_E_NOT_OWNER O chamador não possui o bloqueio.
HOST_E_ABANDONED Um evento foi cancelado enquanto uma fibra ou um thread bloqueado estava esperando por ele.
E_FAIL Uma falha catastrófica desconhecida ocorreu. Quando um método retorna E_FAIL, o CLR não pode mais ser usado no processo. Chamadas subsequentes para métodos de hospedagem retornam HOST_E_CLRNOTAVAILABLE.
HOST_E_INVALIDOPERATION CreateRWLockOwnerIterator foi chamado em um thread que atualmente está executando o código gerenciado.

Comentários

Os hosts normalmente chamam os métodos CreateRWLockOwnerIterator, DeleteRWLockOwnerIterator e GetRWLockOwnerNext durante a detecção de deadlock. O host é responsável por garantir que o bloqueio leitor-gravador ainda seja válido, pois o CLR não tenta manter o bloqueio leitor-gravador vivo. Várias estratégias estão disponíveis para o host a fim de garantir a validade do bloqueio:

  • O host pode bloquear chamadas de versão no bloqueio leitor-gravador (por exemplo, IHostSemaphore::ReleaseSemaphore) enquanto garante que esse bloco não cause deadlock.

  • O host pode impedir que a saída aguarde o objeto de evento associado ao bloqueio leitor-gravador, garantindo novamente que esse bloco não cause deadlock.

Observação

CreateRWLockOwnerIterator deve ser chamado somente em threads que estejam executando código não gerenciado no momento.

Requisitos

Plataformas: confira Requisitos do sistema.

Cabeçalho: MSCorEE.h

Biblioteca: incluída como um recurso no MSCorEE.dll

Versões do .NET Framework: disponíveis desde 2.0

Confira também