Thread.BeginThreadAffinity Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Notifica a un host que el código administrado está a punto de ejecutar instrucciones que dependen de la identidad del subproceso del sistema operativo físico actual.
public:
static void BeginThreadAffinity();
public static void BeginThreadAffinity ();
[System.Security.SecurityCritical]
public static void BeginThreadAffinity ();
static member BeginThreadAffinity : unit -> unit
[<System.Security.SecurityCritical>]
static member BeginThreadAffinity : unit -> unit
Public Shared Sub BeginThreadAffinity ()
- Atributos
Excepciones
El llamador no dispone del permiso requerido.
Ejemplos
En el ejemplo siguiente se muestra el uso de los BeginThreadAffinity métodos y EndThreadAffinity para notificar a un host que un bloque de código depende de la identidad de un subproceso de sistema operativo físico.
using namespace System::Threading;
using namespace System::Security::Permissions;
public ref class MyUtility
{
public:
[SecurityPermissionAttribute(SecurityAction::Demand, ControlThread=true)]
void PerformTask()
{
// Code that does not have thread affinity goes here.
//
Thread::BeginThreadAffinity();
//
// Code that has thread affinity goes here.
//
Thread::EndThreadAffinity();
//
// More code that does not have thread affinity.
}
};
using System.Threading;
public class MyUtility
{
public void PerformTask()
{
// Code that does not have thread affinity goes here.
//
Thread.BeginThreadAffinity();
//
// Code that has thread affinity goes here.
//
Thread.EndThreadAffinity();
//
// More code that does not have thread affinity.
}
}
open System.Threading
let performTask () =
// Code that does not have thread affinity goes here.
//
Thread.BeginThreadAffinity()
//
// Code that has thread affinity goes here.
//
Thread.EndThreadAffinity()
//
// More code that does not have thread affinity.
Imports System.Threading
Imports System.Security.Permissions
<SecurityPermission(SecurityAction.Demand, Flags:=SecurityPermissionFlag.ControlThread)> _
Friend Class MyUtility
<SecurityPermission(SecurityAction.Demand, Flags:=SecurityPermissionFlag.ControlThread)> _
Public Sub PerformTask()
' Code that does not have thread affinity goes here.
'
Thread.BeginThreadAffinity()
'
' Code that has thread affinity goes here.
'
Thread.EndThreadAffinity()
'
' More code that does not have thread affinity.
End Sub
End Class
Comentarios
Algunos hosts de Common Language Runtime, como Microsoft SQL Server 2005, proporcionan su propia administración de subprocesos. Un host que proporciona su propia administración de subprocesos puede mover una tarea en ejecución de un subproceso de sistema operativo físico a otro en cualquier momento. La mayoría de las tareas no se ven afectadas por este cambio. Sin embargo, algunas tareas tienen afinidad de subproceso; es decir, dependen de la identidad de un subproceso de sistema operativo físico. Estas tareas deben informar al host cuando ejecutan código que no debe cambiarse.
Por ejemplo, si la aplicación llama a una API del sistema para adquirir un bloqueo del sistema operativo que tenga afinidad de subproceso, como un CRITICAL_SECTION Win32, debe llamar BeginThreadAffinity antes de adquirir el bloqueo y EndThreadAffinity después de liberar el bloqueo.
El uso de este método en el código que se ejecuta en SQL Server 2005 requiere que el código se ejecute en el nivel de protección de host más alto.