Thread.BeginThreadAffinity Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Notifica um host de que o código gerenciado está prestes a executar instruções que dependem da identidade do thread atual do sistema operacional físico.
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
Exceções
O chamador não tem a permissão necessária.
Exemplos
O exemplo a seguir demonstra o uso dos métodos e para notificar um host de que um bloco de código depende da identidade de um BeginThreadAffinity thread do sistema operacional 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
Comentários
Alguns hosts do Common Language Runtime, como Microsoft SQL Server 2005, fornecem seu próprio gerenciamento de thread. Um host que fornece seu próprio gerenciamento de thread pode mover uma tarefa em execução de um thread do sistema operacional físico para outro a qualquer momento. A maioria das tarefas não é afetada por essa alternação. No entanto, algumas tarefas têm afinidade de thread – ou seja, dependem da identidade de um thread do sistema operacional físico. Essas tarefas devem informar o host quando eles executam o código que não deve ser alternado.
Por exemplo, se seu aplicativo chamar uma API do sistema para adquirir um bloqueio do sistema operacional que tenha afinidade de thread, como um win32 CRITICAL_SECTION, você deverá chamar antes de adquirir o bloqueio e depois de liberar o BeginThreadAffinity EndThreadAffinity bloqueio.
O uso desse método no código executado no SQL Server 2005 exige que o código seja executado no nível mais alto de proteção do host.