Comparteix a través de


Thread.EndThreadAffinity Método

Definición

Notifica a un host que el código administrado ha terminado de ejecutar instrucciones que dependen de la identidad del subproceso del sistema operativo físico actual.

public:
 static void EndThreadAffinity();
public static void EndThreadAffinity ();
[System.Security.SecurityCritical]
public static void EndThreadAffinity ();
static member EndThreadAffinity : unit -> unit
[<System.Security.SecurityCritical>]
static member EndThreadAffinity : unit -> unit
Public Shared Sub EndThreadAffinity ()
Atributos

Excepciones

El llamador no dispone del permiso requerido.

Ejemplos

En el ejemplo siguiente se muestra el uso de los métodos y para notificar a un host que un bloque de código depende de la identidad de un BeginThreadAffinity subproceso de sistema operativo EndThreadAffinity 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;
using System.Security.Permissions;

[SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlThread)]
public class MyUtility
{
    [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlThread)]
    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.
    }
}
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 esta conmutación. 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 se debe cambiar.

Por ejemplo, si la aplicación llama a una API del sistema para adquirir un bloqueo del sistema operativo que tiene afinidad de subproceso, como un CRITICAL_SECTION win32, debe llamar a antes de adquirir el bloqueo y después de liberar el BeginThreadAffinity EndThreadAffinity bloqueo.

El uso de este método en 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.

Se aplica a

Consulte también