Thread.EndThreadAffinity Thread.EndThreadAffinity Thread.EndThreadAffinity Thread.EndThreadAffinity Method

Определение

Уведомляет хост об окончании выполнения кодом инструкций, которые зависят от идентификатора текущего потока в операционной системе.Notifies a host that managed code has finished executing instructions that depend on the identity of the current physical operating system thread.

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

Исключения

У вызывающего объекта отсутствует необходимое разрешение.The caller does not have the required permission.

Примеры

В следующем примере показано использование BeginThreadAffinity методов и EndThreadAffinity для уведомления узла о том, что блок кода зависит от удостоверения физического потока операционной системы.The following example demonstrates the use of the BeginThreadAffinity and EndThreadAffinity methods to notify a host that a block of code depends on the identity of a physical operating system thread.

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 'PerformTask
End Class 'MyUtility 

Комментарии

Некоторые узлы среды CLR, например Microsoft SQL Server 2005, предоставляют собственное управление потоками.Some hosts of the common language runtime, such as Microsoft SQL Server 2005, provide their own thread management. Узел, предоставляющий собственное управление потоками, может перемещать исполняемую задачу из одного физического потока операционной системы в другой в любое время.A host that provides its own thread management can move an executing task from one physical operating system thread to another at any time. Это переключение не затрагивает большинство задач.Most tasks are not affected by this switching. Однако некоторые задачи имеют сходство потоков, то есть они зависят от удостоверения физического потока операционной системы.However, some tasks have thread affinity - that is, they depend on the identity of a physical operating system thread. Эти задачи должны информировать узел при выполнении кода, который не должен переключаться.These tasks must inform the host when they execute code that should not be switched.

Например, если приложение вызывает системный API для получения блокировки операционной системы, имеющей сходство потоков, например Win32 CRITICAL_SECTION, необходимо вызвать BeginThreadAffinity перед получением блокировки и EndThreadAffinity после освобождения блокировки.For example, if your application calls a system API to acquire an operating system lock that has thread affinity, such as a Win32 CRITICAL_SECTION, you must call BeginThreadAffinity before acquiring the lock, and EndThreadAffinity after releasing the lock.

При использовании этого метода в коде, который выполняется в SQL Server 2005, требуется, чтобы код выполнялся на самом верхнем уровне защиты узла.Using this method in code that runs under SQL Server 2005 requires the code to be run at the highest host protection level.

Безопасность

SecurityCriticalAttribute
Требуется полное доверие для немедленного вызывающего объекта.Requires full trust for the immediate caller. Этот член не может использоваться частично доверенным или прозрачным кодом.This member cannot be used by partially trusted or transparent code.

Применяется к

Дополнительно