Thread.BeginThreadAffinity Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Уведомляет узел, что управляемый код близок к выполнению инструкций, зависящих от идентификации текущего потока операционной системы.
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 ()
- Атрибуты
Исключения
У вызывающего объекта отсутствует необходимое разрешение.
Примеры
В следующем примере показано использование BeginThreadAffinity методов и EndThreadAffinity для уведомления узла о том, что блок кода зависит от удостоверения потока физической операционной системы.
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
Комментарии
Некоторые узлы среды CLR, например Майкрософт SQL Server 2005, обеспечивают собственное управление потоками. Узел, предоставляющий собственное управление потоками, может в любое время переместить выполняющуюся задачу из одного потока физической операционной системы в другой. Это переключение не влияет на большинство задач. Однако некоторые задачи имеют сходство потоков, т. е. зависят от идентификатора физического потока операционной системы. Эти задачи должны информировать ведущего при выполнении кода, который не следует переключать.
Например, если приложение вызывает системный API для получения блокировки операционной системы, которая имеет сходство потоков, например CRITICAL_SECTION Win32, необходимо вызвать BeginThreadAffinity перед получением блокировки и EndThreadAffinity после снятия блокировки.
Для использования этого метода в коде, который выполняется в SQL Server 2005, код должен выполняться на самом высоком уровне защиты узла.