Identificadores de contexto e clientes multithread

Quando você tem um cliente multithread em que vários threads estão usando a mesma instância de identificador de contexto, o acesso à instância do identificador de contexto é serializado no servidor por padrão. Isso salva o gerenciador de servidores de ter que se proteger contra outro thread do mesmo cliente alterando o contexto ou o contexto em execução enquanto uma chamada é expedida. No entanto, em determinados casos, a serialização pode afetar o desempenho.

Considere o seguinte: dois threads de cliente invocam uma chamada de procedimento remoto que não altera o estado do contexto (por exemplo, a chamada simplesmente obtém alguns valores dela). Essas chamadas não precisam ser serializadas.

Para essas situações, o Windows XP oferece um modelo de serialização de modo misto, em que cada método pode ser declarado com acesso exclusivo ou compartilhado a um identificador de contexto. Consulte context_handle_serialize e context_handle_noserialize para obter detalhes.

Em versões do Windows anteriores ao Windows XP, o único meio de permitir o acesso simultâneo a um identificador de contexto é chamar a função RpcSsDontSerializeContext para permitir que várias chamadas sejam enviadas em um único identificador de contexto. Chamar a função RpcSsDontSerializeContext não desabilita totalmente a serialização; quando ocorre um run-down de contexto, a rotina de run down de contexto é executada somente quando todas as solicitações de cliente pendentes são concluídas. Uma chamada para RpcScDontSerializeContext afeta todo o processo e não é revertível. Não é recomendável usar RpcScDontSerializeContext no Windows XP e versões posteriores; isso torna o código do servidor muito complicado ao lidar de forma confiável com condições de corrida inerentes a ambientes completamente não serializados.