IUMSThreadProxy-Struktur
Eine Abstraktion für einen Thread der Ausführung. Wenn dem Planer im Benutzermodus planbare (UMS) Threads gewährt werden sollen, legen Sie den Wert für das Planerrichtlinienelement SchedulerKind
auf UmsThreadDefault
fest, und implementieren Sie die IUMSScheduler
-Schnittstelle. UMS-Threads werden nur unter 64-Bit-Betriebssystemen mit Version Windows 7 und höher unterstützt.
Syntax
struct IUMSThreadProxy : public IThreadProxy;
Member
Öffentliche Methoden
Name | Beschreibung |
---|---|
IUMSThreadProxy::EnterCriticalRegion | Wird aufgerufen, um einen kritischen Bereich einzugeben. In einem kritischen Bereich beobachtet der Planer keine asynchronen Blockierungsvorgänge, die während des Bereichs auftreten. Dies bedeutet, dass der Scheduler für Seitenfehler, Threadaufsetzungen, Kernel-asynchrone Prozeduraufrufe (APCs) und so weiter für einen UMS-Thread nicht erneut eingeteilt wird. |
IUMSThreadProxy::EnterHyperCriticalRegion | Wird aufgerufen, um einen hyperkritischen Bereich einzugeben. In einem hyperkritischen Bereich beobachtet der Planer keine Blockierungsvorgänge, die während der Region auftreten. Dies bedeutet, dass der Scheduler nicht erneut zum Blockieren von Funktionsaufrufen, Sperrerfassungsversuchen, die Blockierung, Seitenfehler, Threadaufsetzungen, Kernel-asynchrone Prozeduraufrufe (APCs) usw. für einen UMS-Thread erneut verwendet wird. |
IUMSThreadProxy::ExitCriticalRegion | Wird aufgerufen, um einen kritischen Bereich zu verlassen. |
IUMSThreadProxy::ExitHyperCriticalRegion | Wird aufgerufen, um einen hyperkritischen Bereich zu verlassen. |
IUMSThreadProxy::GetCriticalRegionType | Gibt die Art der kritischen Region zurück, in der sich der Threadproxy befindet. Da hyperkritische Regionen eine Obermenge kritischer Regionen sind, wird zurückgegeben, wenn Code einen kritischen Bereich eingegeben hat und dann eine hyperkritische Region InsideHyperCriticalRegion zurückgegeben wird. |
Vererbungshierarchie
IUMSThreadProxy
Anforderungen
Kopfzeile: concrtrm.h
Namespace: Parallelität
IUMSThreadProxy::EnterCriticalRegion-Methode
Wird aufgerufen, um einen kritischen Bereich einzugeben. In einem kritischen Bereich beobachtet der Planer keine asynchronen Blockierungsvorgänge, die während des Bereichs auftreten. Dies bedeutet, dass der Scheduler für Seitenfehler, Threadaufsetzungen, Kernel-asynchrone Prozeduraufrufe (APCs) und so weiter für einen UMS-Thread nicht erneut eingeteilt wird.
virtual int EnterCriticalRegion() = 0;
Rückgabewert
Die neue Tiefe kritischer Regionen. Kritische Regionen werden wiederholt.
IUMSThreadProxy::EnterHyperCriticalRegion-Methode
Wird aufgerufen, um einen hyperkritischen Bereich einzugeben. In einem hyperkritischen Bereich beobachtet der Planer keine Blockierungsvorgänge, die während der Region auftreten. Dies bedeutet, dass der Scheduler nicht erneut zum Blockieren von Funktionsaufrufen, Sperrerfassungsversuchen, die Blockierung, Seitenfehler, Threadaufsetzungen, Kernel-asynchrone Prozeduraufrufe (APCs) usw. für einen UMS-Thread erneut verwendet wird.
virtual int EnterHyperCriticalRegion() = 0;
Rückgabewert
Die neue Tiefe hyperkritischer Regionen. Hyperkritische Regionen werden erneut wiederholt.
Hinweise
Der Planer muss außerordentlich sorgfältig darauf achten, welche Methoden sie aufruft und welche Sperren sie in solchen Regionen erwerben. Wenn Code in einer solchen Region eine Sperre blockiert, die von etwas gehalten wird, das der Planer für die Planung verantwortlich ist, kann Deadlock ensue.
IUMSThreadProxy::ExitCriticalRegion-Methode
Wird aufgerufen, um einen kritischen Bereich zu verlassen.
virtual int ExitCriticalRegion() = 0;
Rückgabewert
Die neue Tiefe kritischer Regionen. Kritische Regionen werden wiederholt.
IUMSThreadProxy::ExitHyperCriticalRegion-Methode
Wird aufgerufen, um einen hyperkritischen Bereich zu verlassen.
virtual int ExitHyperCriticalRegion() = 0;
Rückgabewert
Die neue Tiefe hyperkritischer Regionen. Hyperkritische Regionen werden erneut wiederholt.
IUMSThreadProxy::GetCriticalRegionType-Methode
Gibt die Art der kritischen Region zurück, in der sich der Threadproxy befindet. Da hyperkritische Regionen eine Obermenge kritischer Regionen sind, wird zurückgegeben, wenn Code einen kritischen Bereich eingegeben hat und dann eine hyperkritische Region InsideHyperCriticalRegion
zurückgegeben wird.
virtual CriticalRegionType GetCriticalRegionType() const = 0;
Rückgabewert
Der Typ des kritischen Bereichs, in dem sich der Threadproxy befindet.