Compartir a través de


Serialización en modo mixto de identificadores de contexto

A partir de Windows XP, una única interfaz puede acomodar los identificadores de contexto serializados y noserializados, lo que permite que un método en una interfaz acceda exclusivamente a un identificador de contexto (serializado), mientras que otros métodos acceden a ese controlador de contexto en modo compartido (no serializado). Para obtener más información sobre los identificadores de contexto, consulte los siguientes atributos:

Las funcionalidades de acceso al modo serializado y compartido son comparables a los mecanismos de bloqueo de lectura y escritura; los métodos que usan un identificador de contexto serializado son usuarios exclusivos (escritores), mientras que los métodos que usan un identificador de contexto no serializado son usuarios compartidos (lectores). Los métodos que destruyen o modifican el estado de un identificador de contexto deben serializarse. Los métodos que no modifican el estado de un controlador de contexto, como los métodos que simplemente leen de un identificador de contexto, se pueden norializar. El uso de un identificador de contexto en modo mixto puede mejorar considerablemente la escalabilidad de un servidor, especialmente cuando varios subprocesos realizan llamadas simultáneas al mismo identificador de contexto.

RPC no aplica "bloqueo de escritura" en métodos que usan un identificador de contexto en modo compartido, lo que significa que las aplicaciones deben asegurarse de que los identificadores de contexto del modo compartido no se modifiquen. La modificación de un identificador de contexto usado en el modo compartido puede dar lugar a daños sutiles del contenido del controlador de contexto, que son imposibles de depurar.

Cambiar la lógica de serialización de un identificador de contexto solo afecta al servidor. Además, cambiar la lógica de serialización de un identificador de contexto no afecta al formato de conexión y, por lo tanto, los cambios en la lógica de serialización en un servidor no afectan a la capacidad de los clientes existentes para interactuar con el servidor.

No se recomienda usar solo identificadores de contexto noserializados. Los servidores que usan identificadores no serializados deben cambiar a acceso serializado para el método que cierra el identificador de contexto.

Normalmente, los identificadores de contexto que son [out]-only se usan en los métodos de creación y no requieren ninguna serialización. Por lo tanto, cualquier atributo de serialización aplicado a los identificadores de contexto [out]only, como context_handle_serialize o context_handle_noserialize, se omite mediante RPC.

Nota

Los métodos de creación se serializan implícitamente.

 

Ejemplos

En los dos ejemplos siguientes se muestra cómo habilitar la serialización en modo mixto de identificadores de contexto.

En el primer ejemplo se muestra cómo hacerlo en el archivo IDL:

typedef [context_handle] void *TestContextHandleExclusive;
typedef [context_handle] TestContextHandleExclusive TestContextHandleShared;

void
UseShared(...
          [in] TestContextHandleShared *Ctx,
          ...);

void
UseExclusive(...
             [in, out] TestContextHandleExclusive *Ctx,
             ...);

En el segundo ejemplo se muestra cómo habilitar la serialización en modo mixto de identificadores de contexto en el archivo ACF:

typedef [context_handle_serialize] TestContextHandleExclusive;

typedef [context_handle_noserialize] TestContextHandleShared;

context_handle

context_handle_serialize

context_handle_noserialize