Função RpcSsContextLockShared (rpcasync.h)

A função RpcSsContextLockShared permite que um aplicativo comece a usar um identificador de contexto no modo compartilhado.

Sintaxe

RPC_STATUS RpcSsContextLockShared(
  [in] RPC_BINDING_HANDLE ServerBindingHandle,
  [in] PVOID              UserContext
);

Parâmetros

[in] ServerBindingHandle

Identificador de associação no servidor que representa uma associação a um cliente. O servidor representa o cliente indicado por esse identificador. Se um valor igual a zero for especificado, o servidor representará o cliente que está sendo atendido por esse thread de servidor.

[in] UserContext

Ponteiro passado para a rotina do gerenciador ou servidor por RPC. Confira Comentários para obter mais informações.

Para [out] somente identificadores de contexto, a função RpcSsContextLockShared não executa nenhuma operação.

Retornar valor

Retorna RPC_S_OK após a execução bem-sucedida, indicando que o thread agora tem acesso ao identificador de contexto no modo compartilhado.

Nota Para obter uma lista de códigos de erro válidos, consulte RPC Return Values.
 

Comentários

Modificar se um identificador de contexto é serializado ou não pode ser útil para aplicativos que determinam se um identificador de contexto deve ser fechado com base nas condições detectadas durante a execução. Para alterar um identificador de contexto de não inicializado (compartilhado) para serializado (exclusivo), use a função RpcSsContextLockExclusive .

Para o parâmetro UserContext , se a rotina do gerenciador receber um ponteiro para um identificador de contexto, ele deverá passar a função RpcSsContextLockShared o mesmo ponteiro que recebeu do RPC. Se a rotina do gerenciador receber o próprio identificador de contexto, que é típico para [in] apenas identificadores de contexto, ele deverá passar o próprio identificador de contexto para a função RpcSsContextLockShared . O exemplo de código a seguir demonstra isso:

UseExclusive (..., /* [in] */ TestContextHandleExclusive *Ctx, ...)
{
    ...
    // we decided that we're done changing the context handle exclusively
    // and that we have extensive processing ahead - downgrade the exclusive
    // lock to shared, and do the processing allowing other readers in
    RpcSsContextLockShared (NULL,    // use the explicit context
        Ctx
        );
    ...
}

Se uma rotina de gerente usa vários identificadores de contexto [entrada, saída] como um argumento, o RPC fornece à rotina do gerente um ponteiro para o identificador de contexto, não o próprio identificador de contexto. O ponteiro tem a garantia de ser exclusivo e, portanto, passá-lo para a função RpcSsContextLockShared é inequívoco. No entanto, se uma função usa vários [in] apenas identificadores de contexto, o RPC fornece à rotina do gerenciador o próprio identificador de contexto. Portanto, o identificador de contexto pode não ser exclusivo. Nesse caso, o RPC executa essa função no primeiro identificador de contexto com o valor fornecido.

Os métodos não devem modificar um identificador de contexto quando estiverem no modo compartilhado. Chamar a função RpcSsContextLockShared não elimina um bloqueio de gravador no identificador de contexto especificado; isso garante que o identificador de contexto não será alterado por outro thread.

Chamadas assíncronas não devem usar a função RpcSsContextLockShared no mesmo objeto de chamada de mais de um thread por vez.

A função RpcSsContextLockShared pode falhar devido a condições de memória insuficiente e, portanto, os servidores RPC devem estar preparados para lidar com esses erros.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho rpcasync.h (inclua Rpc.h)
Biblioteca Rpcrt4.lib
DLL Rpcrt4.dll

Confira também

RpcSsContextLockExclusive

context_handle

context_handle_noserialize

context_handle_serialize