21 #if defined(BUILD_WINDOWS)
22 #error Must not be included during CRT build with _CRT_WINDOWS flag enabled
25 #if !(defined (_M_X64) || defined (_M_IX86) || defined (_M_ARM) || defined (_M_ARM64))
26 #error ERROR: Concurrency Runtime is supported only on X64, X86, ARM, and ARM64 architectures.
30 #error ERROR: Concurrency Runtime is not supported when compiling /clr.
34 #error ERROR: Concurrency Runtime is supported only for C++.
49 #pragma pack(push,_CRT_PACKING)
50 #pragma push_macro("new")
55 struct _SECURITY_ATTRIBUTES;
58 struct _GROUP_AFFINITY;
64 #ifndef _HRESULT_DEFINED
65 #define _HRESULT_DEFINED
74 #pragma push_macro("_YieldProcessor")
75 #undef _YieldProcessor
77 #if (defined (_M_IX86) || defined (_M_X64))
78 #define _YieldProcessor _mm_pause
83 #if (defined (_M_IX86) || defined (_M_ARM))
85 #define _InterlockedIncrementSizeT(_Target) static_cast<size_t>(_InterlockedIncrement(reinterpret_cast<long volatile *>(_Target)))
86 #define _InterlockedDecrementSizeT(_Target) static_cast<size_t>(_InterlockedDecrement(reinterpret_cast<long volatile *>(_Target)))
87 #define _InterlockedCompareExchangeSizeT(_Target, _Exchange, _Comparand) static_cast<size_t>(_InterlockedCompareExchange( \
88 reinterpret_cast<long volatile *>(_Target), \
89 static_cast<long>(_Exchange), \
90 static_cast<long>(_Comparand)))
96 #define _InterlockedIncrementSizeT(_Target) static_cast<size_t>(_InterlockedIncrement64(reinterpret_cast<__int64 volatile *>(_Target)))
97 #define _InterlockedDecrementSizeT(_Target) static_cast<size_t>(_InterlockedDecrement64(reinterpret_cast<__int64 volatile *>(_Target)))
98 #define _InterlockedCompareExchangeSizeT(_Target, _Exchange, _Comparand) static_cast<size_t>(_InterlockedCompareExchange64( \
99 reinterpret_cast<__int64 volatile *>(_Target), \
100 static_cast<__int64>(_Exchange), \
101 static_cast<__int64>(_Comparand)))
118 #define _CONCRT_ASSERT(x) __pragma (warning (suppress: 4127)) do {_ASSERTE(x); __assume(x);} while(false)
120 #define _CONCRT_ASSERT(x) do {_ASSERTE(x); __assume(x);} while(false)
123 #define _CONCRT_ASSERT(x) __assume(x)
130 #define _LISTENTRY_SIZE ((2 * sizeof(void *) + sizeof(_CONCRT_BUFFER) - 1) / sizeof(_CONCRT_BUFFER))
131 #define _SAFERWLIST_SIZE ((3 * sizeof(void *) + 2 * sizeof(long) + sizeof(_CONCRT_BUFFER) - 1) / sizeof(_CONCRT_BUFFER))
194 #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
218 _CONCRTIMP void __cdecl set_task_execution_resources(DWORD_PTR _ProcessAffinityMask);
266 class _TaskCollectionBase;
288 void operator delete(
void * _Ptr)
throw()
294 void *
operator new(
size_t _Size,
const std::nothrow_t&)
throw()
311 void operator delete(
void * _Ptr,
const std::nothrow_t&)
throw()
313 operator delete(_Ptr);
319 return operator new(
_Size);
323 void operator delete[](
void * _Ptr)
throw()
325 operator delete(_Ptr);
329 void *
operator new[](
size_t _Size,
const std::nothrow_t& _No_throw)
throw ()
331 return operator new(
_Size, _No_throw);
335 void operator delete[](
void * _Ptr,
const std::nothrow_t& _No_throw)
throw()
337 operator delete(_Ptr, _No_throw);
341 void *
operator new(
size_t,
void * _Location)
throw()
347 void operator delete(
void *,
void *)
throw()
352 void * __cdecl
operator new[](
size_t,
void * _Location)
throw()
358 void __cdecl
operator delete[](
void *,
void *)
throw()
400 template <
size_t _Size>
405 template <
typename _Ty>
412 template <
typename _Ty>
419 template <
typename _Ty>
424 template <
typename _Ty>
426 return (_Ty)_InterlockedExchangeAdd((
volatile long*)&_Location, (
long)_Addend);
429 template <
typename _Ty>
434 template <
typename _Ty>
442 struct _Subatomic_impl<8> {
443 template <
typename _Ty>
444 static void _StoreWithRelease(
volatile _Ty& _Location, _Ty _Rhs) {
449 template <
typename _Ty>
450 static _Ty _LoadWithAquire(
volatile _Ty& _Location) {
455 template <
typename _Ty>
456 static _Ty _CompareAndSwap(
volatile _Ty& _Location, _Ty _NewValue, _Ty _Comperand) {
457 return (_Ty)_InterlockedCompareExchange64((
volatile __int64*)&_Location, (__int64)_NewValue, (__int64)_Comperand);
460 template <
typename _Ty>
461 static _Ty _FetchAndAdd(
volatile _Ty& _Location, _Ty _Addend) {
462 return (_Ty)_InterlockedExchangeAdd64((
volatile __int64*)&_Location, (__int64)_Addend);
465 template <
typename _Ty>
466 static _Ty _Increment(
volatile _Ty& _Location) {
467 return (_Ty)_InterlockedIncrement64((
volatile __int64*)&_Location);
470 template <
typename _Ty>
471 static _Ty _Decrement(
volatile _Ty& _Location) {
472 return (_Ty)_InterlockedDecrement64((
volatile __int64*)&_Location);
482 template <
typename _Ty>
488 operator _Ty()
const volatile {
577 template<
unsigned int _YieldCount = 1>
582 typedef void (__cdecl *_YieldFunction)();
589 : _M_yieldFunction(_YieldMethod), _M_state(_StateInitial)
604 _M_state = _StateSingle;
609 _M_currentYield = _YieldCount;
610 _M_state = _StateSpin;
632 unsigned long _Count = _NumberOfSpins();
634 for (
unsigned long _I = 0; _I <
_Count; _I++)
639 if (!_ShouldSpinAgain())
641 _M_state = (_M_currentYield == 0) ? _StateBlock : _StateYield;
649 if (--_M_currentYield == 0)
651 _M_state = _StateBlock;
699 #pragma warning ( push )
700 #pragma warning ( disable : 6326 ) // potential comparison of a constant with another constant
701 bool _ShouldYield = (_YieldCount != 0);
702 #pragma warning ( pop )
720 _M_state = _StateInitial;
750 return (--_M_currentSpin > 0);
1043 template<
typename _ElemType>
1064 if (_MallocaRet ==
nullptr)
1065 throw std::bad_alloc();
1066 _Initialize(static_cast<_ElemType *>(_MallocaRet));
1067 return static_cast<_ElemType *
>(_MallocaRet);
1099 template<
typename _ElemType>
1126 if (_MallocaRet ==
nullptr)
1127 throw std::bad_alloc();
1128 _AddNode(static_cast<_ElemType *>(_MallocaRet));
1129 return static_cast<_ElemType *
>(_MallocaRet);
1137 auto _M_Next = _Node->_M_Next;
1138 _Node->_M_Elem._ElemType::~_ElemType();
1854 #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
2023 template<
typename _Ty>
2082 #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP
2121 virtual unsigned int Id()
const =0;
2140 virtual unsigned int Reference() =0;
2161 virtual unsigned int Release() =0;
2170 virtual ~ScheduleGroup() {};
2179 const unsigned int MaxExecutionResources = 0xFFFFFFFF;
2187 const unsigned int INHERIT_THREAD_PRIORITY = 0x0000F000;
2198 enum PolicyElementKey
2241 TargetOversubscriptionFactor,
2252 LocalContextCacheSize,
2290 DynamicProgressFeedback,
2300 WinRTInitialization,
2330 UmsThreadDefault = ThreadScheduler
2333 #pragma deprecated(UmsThreadDefault)
2342 enum SchedulingProtocolType
2350 EnhanceScheduleGroupLocality,
2357 EnhanceForwardProgress
2368 enum DynamicProgressFeedbackType
2377 ProgressFeedbackDisabled,
2386 ProgressFeedbackEnabled
2396 enum WinRTInitializationType
2403 InitializeWinRTAsMTA,
2410 DoNotInitializeWinRT
2426 class SchedulerPolicy
2473 _CONCRTIMP SchedulerPolicy(
size_t _PolicyKeyCount, ...);
2497 _CONCRTIMP SchedulerPolicy(
const SchedulerPolicy& _SrcPolicy);
2540 _CONCRTIMP unsigned int GetPolicyValue(PolicyElementKey _Key)
const;
2566 _CONCRTIMP unsigned int SetPolicyValue(PolicyElementKey _Key,
unsigned int _Value);
2587 _CONCRTIMP void SetConcurrencyLimits(
unsigned int _MinConcurrency,
unsigned int _MaxConcurrency = MaxExecutionResources);
2598 void _ValidateConcRTPolicy()
const;
2606 unsigned int _M_pPolicyBag[MaxPolicyElementKey];
2609 SchedulerType _M_schedulerKind;
2610 unsigned int _M_maxConcurrency;
2611 unsigned int _M_minConcurrency;
2612 unsigned int _M_targetOversubscriptionFactor;
2613 unsigned int _M_localContextCacheSize;
2614 unsigned int _M_contextStackSize;
2615 unsigned int _M_contextPriority;
2616 SchedulingProtocolType _M_schedulingProtocol;
2617 DynamicProgressFeedbackType _M_dynamicProgressFeedback;
2618 WinRTInitializationType _M_WinRTInitialization;
2619 } _M_specificValues;
2627 void _Initialize(
size_t _PolicyKeyCount,
va_list * _PArgs);
2633 void _Assign(
const SchedulerPolicy& _SrcPolicy);
2639 static bool __cdecl _ValidPolicyKey(PolicyElementKey _Key);
2645 static bool __cdecl _ValidPolicyValue(PolicyElementKey _Key,
unsigned int _Value);
2651 static bool __cdecl _AreConcurrencyLimitsValid(
unsigned int _MinConcurrency,
unsigned int _MaxConcurrency);
2652 bool _AreConcurrencyLimitsValid()
const;
2658 bool _ArePolicyCombinationsValid()
const;
2664 void _ResolvePolicyValues();
2670 static char * __cdecl _StringFromPolicyKey(
unsigned int _Index);
2685 class CurrentScheduler
2688 CurrentScheduler() {}
2715 _CONCRTIMP static SchedulerPolicy __cdecl GetPolicy();
2744 _CONCRTIMP static unsigned int __cdecl GetNumberOfVirtualProcessors();
2769 _CONCRTIMP static void __cdecl Create(
const SchedulerPolicy& _Policy);
2804 _CONCRTIMP static void __cdecl RegisterShutdownEvent(HANDLE _ShutdownEvent);
2827 _CONCRTIMP static ScheduleGroup * __cdecl CreateScheduleGroup();
2853 _CONCRTIMP static ScheduleGroup * __cdecl CreateScheduleGroup(location& _Placement);
2917 _CONCRTIMP static bool __cdecl IsAvailableLocation(
const location& _Placement);
2958 virtual ~Scheduler() {}
2986 _CONCRTIMP static Scheduler * __cdecl Create(
const SchedulerPolicy& _Policy);
2995 virtual unsigned int Id()
const =0;
3006 virtual unsigned int GetNumberOfVirtualProcessors()
const =0;
3019 virtual SchedulerPolicy GetPolicy()
const =0;
3036 virtual unsigned int Reference() =0 ;
3051 virtual unsigned int Release() =0;
3062 virtual void RegisterShutdownEvent(HANDLE _Event) =0;
3080 virtual void Attach() =0;
3100 _CONCRTIMP static void __cdecl SetDefaultSchedulerPolicy(
const SchedulerPolicy& _Policy);
3114 _CONCRTIMP static void __cdecl ResetDefaultSchedulerPolicy();
3134 virtual ScheduleGroup * CreateScheduleGroup() =0;
3157 virtual ScheduleGroup * CreateScheduleGroup(location& _Placement) =0;
3192 virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void * _Data, location& _Placement) =0;
3209 virtual bool IsAvailableLocation(
const location& _Placement)
const =0;
3239 virtual unsigned int GetId()
const =0;
3254 virtual unsigned int GetVirtualProcessorId()
const =0;
3269 virtual unsigned int GetScheduleGroupId()
const =0;
3294 _CONCRTIMP static unsigned int __cdecl VirtualProcessorId();
3305 _CONCRTIMP static unsigned int __cdecl ScheduleGroupId();
3351 virtual void Unblock() =0;
3369 virtual bool IsSynchronouslyBlocked()
const =0;
3407 static inline void __cdecl YieldExecution()
3423 _CONCRTIMP static bool __cdecl IsCurrentTaskCollectionCanceling();
3436 _CONCRTIMP static Context * __cdecl CurrentContext();
3448 _CONCRTIMP static void __cdecl Oversubscribe(
bool _BeginOversubscription);
3457 virtual ~Context() {};
3595 bool _Acquire_lock(
void * _PLockingNode,
bool _FHasExternalNode);
3768 void _Acquire_lock(
void * _PLockingNode,
bool _FHasExternalNode);
3831 scoped_lock_read
const &
operator=(
const scoped_lock_read&);
4020 event(
const event& _Event);
4097 _NonReentrantPPLLock&
operator=(
const _NonReentrantPPLLock&) =
delete;
4112 _Scoped_lock&
operator=(
const _Scoped_lock&) =
delete;
4135 _ReentrantPPLLock&
operator=(
const _ReentrantPPLLock&) =
delete;
4238 template <
typename _ChoreType,
typename _Function>
4242 _ChoreType *
_Chore =
new _ChoreType(_Func);
4243 _Chore->_M_fRuntimeOwnsLifetime =
true;
4252 template <
typename _ChoreType>
4255 auto _PChore =
static_cast<_ChoreType *
>(_PContext);
4314 _M_pTokenState(
NULL),
4315 _M_completedStolenChores(_CollectionNotInitialized),
4316 _M_unpoppedChores(0),
4317 _M_pException(
NULL),
4318 _M_inliningDepth(_S_notInlined)
4325 _M_pTokenState(_PTokenState),
4326 _M_completedStolenChores(_CollectionNotInitialized),
4327 _M_unpoppedChores(0),
4328 _M_pException(
NULL),
4329 _M_inliningDepth(_S_notInlined)
4338 return _M_pOwningContext;
4344 return _M_inliningDepth;
4350 return (_M_inliningDepth != _S_notInlined);
4356 return (_M_inlineFlags & _S_structured) != 0;
4364 friend class ::Concurrency::details::_UnrealizedChore;
4365 friend class ::Concurrency::details::ContextBase;
4371 _CollectionInitialized = 0
4377 return (std::exception_ptr *) ((
size_t)_M_pException & ~_S_cancelBitsMask);
4383 return _M_pException !=
NULL;
4389 return (
size_t) _M_pException & _S_cancelBitsMask;
4395 return (_CancelState() & _S_cancelBitsMask) != 0;
4402 return _CancelState() == _S_cancelShotdownOwner;
4408 return _CancelState() == _S_cancelDeferredShootdownOwner;
4414 return ((_M_inliningDepth != _S_notInlined) ? _M_pParent :
NULL);
4418 bool _WillInterruptForPendingCancel();
4422 void _RaisedException();
4426 void _RethrowException();
4429 bool _MarkCancellation();
4433 void _FinishCancelState(
size_t _NewCancelState);
4438 void _RaisedCancel();
4445 int _M_inliningDepth : 28;
4446 int _M_inlineFlags : 4;
4471 static const size_t _S_cancelBitsMask = 0x3;
4472 static const size_t _S_cancelNone = 0x0;
4473 static const size_t _S_cancelStarted = 0x1;
4474 static const size_t _S_cancelDeferredShootdownOwner = 0x2;
4475 static const size_t _S_cancelShotdownOwner = 0x3;
4478 static const size_t _S_nonNull = 0x8;
4479 static const size_t _S_cancelException = 0xC;
4482 static const int _S_notInlined = -1;
4485 static const int _S_structured = 0x00000001;
4486 static const int _S_localCancel = 0x00000002;
4487 static const int _S_reserved = 0x0000000C;
4506 _M_pTokenState =
NULL;
4606 return _RunAndWait();
4613 void _CancelStolenContexts();
4621 _M_pOwningContext =
NULL;
4622 _M_inlineFlags = _S_structured;
4647 if (_M_unpoppedChores > 0)
4651 if (!__uncaught_exception())
4673 void _WaitOnStolenChores(
long _StolenChoreCount);
4692 _CONCRT_BUFFER _M_event[(
sizeof(
void*) +
sizeof(_CONCRT_BUFFER) - 1) /
sizeof(_CONCRT_BUFFER)];
4713 _TaskCollection&
operator=(
const _TaskCollection&) =
delete;
4811 return _RunAndWait();
4818 bool _IsMarkedForAbnormalExit()
const;
4824 _TaskCollection * _OriginalCollection()
const;
4830 bool _IsAlias()
const;
4842 void _RegisterCompletionHandler(
TaskProc _Func,
void * _PCompletionContext);
4847 friend class ::Concurrency::details::ContextBase;
4854 bool _IsStaleAlias()
const;
4860 void _ReleaseAlias();
4872 _TaskCollection(_TaskCollection * _POriginCollection,
bool _FDirectAlias);
4878 _TaskCollection * _Alias();
4887 void _Abort(
bool _FLeaveCanceled =
false);
4893 bool _IsIndirectAlias()
const;
4899 bool _IsDirectAlias()
const;
4905 bool _HasDirectAlias()
const;
4918 void _Cancel(
bool _InsideException, _TaskCollection * _PSnapPoint);
4924 void _NotifyNewChore();
4942 void _FullAliasWait(_TaskCollection * _PSnapPoint);
4951 void _Reset(_TaskCollection * _PSnapPoint);
4959 void _RaisedException();
4967 void _RaisedCancel();
4979 bool _SetCancelState(
long _Status);
4989 void _CancelFromArbitraryThread(
bool _InsideException);
5002 void _CancelDirectAliases(
bool _InsideException, _TaskCollection * _PSnapPoint);
5017 void _CancelStolenContexts(
bool _InsideException,
bool _FInlineGated);
5023 void *_GetStealTrackingList()
const;
5038 void _AbortiveSweep(
void *_PCtx);
5053 static bool __cdecl _CollectionMatchPredicate(
_UnrealizedChore *_PChore,
void *_PData);
5068 static bool __cdecl _SweepAbortedChore(
_UnrealizedChore *_PChore,
void *_PData);
5077 bool _TaskCleanup(
bool _FExceptional);
5122 int _M_taskCookies[2];
5160 return _Depth <= static_cast<size_t>(_InliningMode);
5170 _CONCRTIMP static size_t & __cdecl _GetCurrentInlineDepth();
5218 _M_taskCollection._Schedule(_PChore);
5226 return _M_taskCollection._RunAndWait(_PChore);
5230 _M_taskCollection._Schedule(_PChore);
5241 _M_taskCollection._Cancel();
5261 return _M_taskCollection._RunAndWait();
5266 void _NotificationHandler();
5274 static
void __cdecl _CompletionHandler(
void * _PCompletionContext);
5309 return (_M_pRef->_M_signals != 0);
5360 friend class _TimerStub;
5363 virtual void _Fire() =0;
5386 EnableFlags = _Flags;
5387 EnableLevel = _Level;
5389 #pragma warning ( push )
5390 #pragma warning ( disable : 5393 ) // unreachable code
5396 #pragma warning ( pop )
5398 bool _IsEnabled(
unsigned char _Level,
unsigned long _Flags)
const
5400 return ((_Level <= EnableLevel) && ((EnableFlags & _Flags) == _Flags));
5433 __declspec(deprecated(
"Concurrency::EnableTracing is a deprecated function."))
_CONCRTIMP HRESULT __cdecl EnableTracing();
5718 #ifndef _NO_DEFAULT_CONCRT_LIB
5726 #define _DEBUG_AFFIX "d"
5727 #define _IDL_DEFAULT 2
5729 #define _DEBUG_AFFIX ""
5730 #define _IDL_DEFAULT 0
5733 #if defined(_DLL) && !defined(_STATIC_CPPLIB)
5734 #define _LIB_STEM "concrt"
5736 #define _LIB_STEM "libconcrt"
5737 #if _ITERATOR_DEBUG_LEVEL != _IDL_DEFAULT
5738 #define _IDL_AFFIX _CRT_STRINGIZE(_ITERATOR_DEBUG_LEVEL)
5743 #define _IDL_AFFIX ""
5746 #pragma comment(lib, _LIB_STEM _DEBUG_AFFIX _IDL_AFFIX)
5757 #pragma pop_macro("_YieldProcessor")
5758 #pragma pop_macro("new")
_CONCRTIMP void _Release()
friend class _TaskCollection
Definition: concrt.h:4265
DWORD _M_boundQueueId
Definition: concrt.h:5127
_Scoped_lock const & operator=(const _Scoped_lock &)
void operator=(const _SpinLock &)
_CONCRTIMP const GUID VirtualProcessorEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to v...
A cancellation beacon is a flag which can be polled in an inlinable fashion using the is_signaled met...
Definition: concrt.h:5299
This class describes an exception thrown when the link_target method of a messaging block is called a...
Definition: concrt.h:1570
std::exception_ptr * _Exception() const
Definition: concrt.h:4375
int _InliningDepth() const
Definition: concrt.h:4342
_CONCRTIMP void __cdecl wait(unsigned int _Milliseconds)
Pauses the current context for a specified amount of time.
void _Raise()
Definition: concrt.h:5316
_CONCRTIMP scheduler_resource_allocation_error(_In_z_ const char *_Message, HRESULT _Hresult)
Constructs a scheduler_resource_allocation_error object.
void _PrepareStealStructured(ContextBase *_PContext)
void _Assign(const location &_Rhs)
Assigns _Rhs to this location.
Definition: concrt.h:1999
_CONCRTIMP const GUID ContextEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to c...
void * _M_pReaderHead
Definition: concrt.h:3897
void _AddNode(_ElemType *_Elem)
Definition: concrt.h:1114
bool _ShouldInline(_TaskInliningMode _InliningMode) const
Definition: concrt.h:5156
~_Scoped_lock()
Definition: concrt.h:901
Definition: functional:68
long _Reference()
Definition: concrt.h:4042
This class describes an exception thrown when an attempt is made to set the concurrency limits of a S...
Definition: concrt.h:1655
_Variant_copymove_layer_ & operator=(_Variant_copymove_layer_ &&_That) _NOEXCEPT_OP((conjunction< is_nothrow_move_constructible< _Types >...
Definition: concrt.h:1100
_ReaderWriterLock & _M_lock
Definition: concrt.h:1005
_YieldFunction _M_yieldFunction
Definition: concrt.h:756
Agents_EventType
The types of events that can be traced using the tracing functionality offered by the Agents Library ...
Definition: concrt.h:5643
_CONCRTIMP bool _TryAcquire()
_SpinWait(_YieldFunction _YieldMethod=_UnderlyingYield)
Construct a spin wait object
Definition: concrt.h:588
static _CONCRTIMP void __cdecl _Yield()
An event type used for miscellaneous events.
Definition: concrt.h:5455
static void __cdecl _Initialize()
Definition: concrt.h:1020
Indicates that the location represents a particular NUMA node.
Definition: concrt.h:1950
An event type that marks the beginning of a start/end event pair.
Definition: concrt.h:5465
size_t _M_ElemsConstructed
Definition: concrt.h:1089
_NonReentrantPPLLock & _M_lock
Definition: concrt.h:4118
_CONCRTIMP bool try_lock_for(unsigned int _Timeout)
Tries to acquire the lock without blocking for a specific number of milliseconds. ...
_CONCRTIMP ~scoped_lock_read()
Destroys a scoped_lock_read object and releases the lock supplied in its constructor.
_CONCRTIMP event()
Constructs a new event.
critical_section & native_handle_type
A reference to a critical_section object.
Definition: concrt.h:3557
Structured task collections represent groups of work which follow a strictly LIFO ordered paradigm qu...
Definition: concrt.h:4495
void * _M_pOwningContext
Definition: concrt.h:4452
Async Task collections is a thin wrapper over task collection to cater to the execution of asynchrono...
Definition: concrt.h:5178
This class describes an exception thrown when a lock is acquired improperly.
Definition: concrt.h:1801
long _M_activeStealersForCancellation
A count of active stealers for CANCELLATION PURPOSES ONLY. This is non-interlocked and guarded by the...
Definition: concrt.h:5097
::Concurrency::critical_section _M_criticalSection
Definition: concrt.h:4163
An event type that represents the linking of message blocks
Definition: concrt.h:5679
This class describes an exception thrown when an invalid or unknown key is passed to a SchedulerPolic...
Definition: concrt.h:1599
static _Ty _LoadWithAquire(volatile _Ty &_Location)
Definition: concrt.h:413
void _Construct()
Definition: concrt.h:4619
An event type that represents the unlinking of message blocks
Definition: concrt.h:5685
static _CONCRTIMP void __cdecl _ScheduleTask(TaskProc _Proc, void *_Data)
volatile long _M_owner
Definition: concrt.h:4169
An event type that represents the act of a attaching to a scheduler.
Definition: concrt.h:5490
_CONCRTIMP void _Acquire(void *_Lock_node)
void _DisableTrace()
Definition: concrt.h:5391
bool _IsEnabled(unsigned char _Level, unsigned long _Flags) const
Definition: concrt.h:5398
Implements busy wait with no backoff
Definition: concrt.h:578
bool operator!=(const location &_Rhs) const
Determines whether two location objects represent different location.
Definition: concrt.h:1919
TaskProc m_pFunction
Definition: concrt.h:4191
#define _CONCRT_ASSERT(x)
Definition: concrt.h:123
Definition: concrt.h:4304
_CONCRTIMP void __cdecl _Trace_ppl_function(const GUID &_Guid, unsigned char _Level, ConcRT_EventType _Type)
_TaskCollectionBase * _M_pParent
Definition: concrt.h:4442
_Ty _FetchAndAdd(_Ty _Addend)
Definition: concrt.h:501
_TaskCollectionBase(_CancellationTokenState *_PTokenState)
Definition: concrt.h:4324
_CONCRTIMP void _Release()
Definition: concrt.h:4128
bool _IsMarkedForCancellation() const
Definition: concrt.h:4393
unsigned int _M_ms
Definition: concrt.h:5369
_CONCRTIMP unsigned int _Release()
Definition: concrt.h:4031
_CONCRTIMP void _Release()
_CONCRTIMP void lock()
Acquires the reader-writer lock as a writer.
_CONCRTIMP scoped_lock_read(reader_writer_lock &_Reader_writer_lock)
Constructs a scoped_lock_read object and acquires the reader_writer_lock object passed in the _Reader...
_UnrealizedChore()
Definition: concrt.h:4201
unsigned int size_t
Definition: sourceannotations.h:19
Indicates that the location represents a particular scheduling node.
Definition: concrt.h:1955
This class describes an exception thrown when the Reference method is called on a Scheduler object th...
Definition: concrt.h:1370
_Ty operator=(_Ty _Rhs)
Definition: concrt.h:492
Definition: concrt.h:5633
void(__cdecl * CHOREFUNC)(_UnrealizedChore *_PChore)
Definition: concrt.h:4266
void *volatile _M_pHead
Definition: concrt.h:3645
bool _HasWriteLock() const
Definition: concrt.h:955
_CONCRTIMP ~_Scoped_lock()
_CONCRTIMP _ReentrantPPLLock()
_CONCRTIMP const GUID PPLParallelForEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to u...
volatile long & _M_flag
Definition: concrt.h:532
static void __cdecl _WaitEquals(volatile const long &_Location, long _Value, long _Mask=0xFFFFFFFF)
void _Unlock_reader()
Called from unlock() when a reader is holding the lock. Reader count is decremented and if this is th...
_CONCRTIMP scoped_lock(reader_writer_lock &_Reader_writer_lock)
Constructs a scoped_lock object and acquires the reader_writer_lock object passed in the _Reader_writ...
_In_ long
Definition: corecrt_wstdlib.h:88
_TaskCollectionStatus _RunAndWait()
A cancellation friendly wrapper with which to execute _PChore and then waits for all chores running i...
Definition: concrt.h:5257
CHOREFUNC _M_pChoreFunction
Definition: concrt.h:4272
This class describes an exception thrown when calls to the Block and Unblock methods of a Context obj...
Definition: concrt.h:1429
This class describes an exception thrown when a messaging block is given a pointer to a target which ...
Definition: concrt.h:1520
void(__cdecl * TaskProc)(void *)
Concurrency::details contains definitions of support routines in the public namespaces and one or mor...
Definition: concrt.h:251
_CONCRT_BUFFER _M_criticalSection[(4 *sizeof(void *)+2 *sizeof(long)+sizeof(_CONCRT_BUFFER)-1)/sizeof(_CONCRT_BUFFER)]
Definition: concrt.h:812
scoped_lock const & operator=(const scoped_lock &)
size_t _CancelState() const
Definition: concrt.h:4387
An event type that represents the creation of an object
Definition: concrt.h:5649
virtual ~_RefCounterBase()
Definition: concrt.h:4035
RAII wrapper used to maintain and limit ppltask maximum inline schedule depth. This class will keep a...
Definition: concrt.h:5138
long _M_unpoppedChores
Definition: concrt.h:4456
_CONCRTIMP scheduler_worker_creation_error(_In_z_ const char *_Message, HRESULT _Hresult)
Constructs a scheduler_worker_creation_error object.
ConcRT_EventType
The types of events that can be traced using the tracing functionality offered by the Concurrency Run...
Definition: concrt.h:5449
void * _M_pTaskExtension
Definition: concrt.h:5120
_CONCRTIMP const GUID PPLParallelInvokeEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to u...
_TaskCollectionStatus _ScheduleWithAutoInline(_UnrealizedChore *_PChore, _TaskInliningMode _InliningMode)
Schedule a chore with automatic inlining. The chore is pushed onto the associated workstealing queue...
Definition: concrt.h:5211
An event type that represents the act of unblocking a context.
Definition: concrt.h:5475
Definition: concrt.h:4305
long _M_recursionCount
Definition: concrt.h:859
_Scoped_lock(_NonReentrantBlockingLock &_Lock)
Definition: concrt.h:895
critical_section & _M_critical_section
Definition: concrt.h:3625
volatile unsigned long EnableFlags
Definition: concrt.h:5381
_SpinWait< 0 > _SpinWaitNoYield
Definition: concrt.h:760
#define _Post_invalid_
Definition: sal.h:692
Concrt_TraceFlags
Trace flags for the event types
Definition: concrt.h:5627
_CONCRTIMP void _ReleaseRead()
void _IncrementConstructedElemsCount()
Definition: concrt.h:1072
~location()
Destroys a location object.
Definition: concrt.h:1896
volatile long _M_signals
Definition: concrt.h:5287
_CONCRTIMP const GUID ConcRT_ProviderGuid
The ETW provider GUID for the Concurrency Runtime.
_MallocaListHolder & operator=(const _MallocaListHolder &)
_CONCRTIMP _NonReentrantBlockingLock()
virtual ~_Chore()
Definition: concrt.h:4184
_ElemNodeType & operator=(const _ElemNodeType &)
_At_(this->_M_FirstNode, _Pre_valid_) virtual ~_MallocaListHolder()
Definition: concrt.h:1133
Definition: concrt.h:5632
_CONCRTIMP native_handle_type native_handle()
Returns a platform specific native handle, if one exists.
_CONCRTIMP scheduler_not_attached()
Constructs a scheduler_not_attached object.
_CONCRTIMP void *__cdecl Alloc(size_t _NumBytes)
Allocates a block of memory of the size specified from the Concurrency Runtime Caching Suballocator...
_CONCRTIMP ~_Scoped_lock()
HRESULT _Hresult
Definition: concrt.h:1222
long _M_recursionCount
Definition: concrt.h:4166
static _Ty _Decrement(volatile _Ty &_Location)
Definition: concrt.h:435
_CONCRTIMP scoped_lock(critical_section &_Critical_section)
Constructs a scoped_lock object and acquires the critical_section object passed in the _Critical_sect...
_CONCRTIMP improper_scheduler_detach()
Constructs an improper_scheduler_detach object.
The Concurrency namespace provides classes and functions that provide access to the Concurrency Runti...
Definition: agents.h:43
Definition: concrt.h:4172
__inline void __CRTDECL _freea(_Pre_maybenull_ _Post_invalid_ void *_Memory)
Definition: malloc.h:147
#define _Pre_valid_
Definition: sal.h:668
location(const location &_Src)
Constructs a location object.
Definition: concrt.h:1849
_CONCRTIMP void _Release()
_CRT_BEGIN_C_HEADER _Check_return_ _Ret_maybenull_ _In_ size_t _Size
Definition: corecrt_malloc.h:58
_ElemType * _InitOnRawMalloca(void *_MallocaRet)
Definition: concrt.h:1062
_CONCRTIMP ~event()
Destroys an event.
static _CONCRTIMP unsigned int __cdecl _Value()
_CONCRT_BUFFER _M_criticalSection[(4 *sizeof(void *)+2 *sizeof(long)+sizeof(_CONCRT_BUFFER)-1)/sizeof(_CONCRT_BUFFER)]
Definition: concrt.h:915
_CONCRTIMP void _Release()
A writer-preference queue-based reader-writer lock with local only spinning. The lock grants first in...
Definition: concrt.h:3670
_CONCRTIMP reader_writer_lock()
Constructs a new reader_writer_lock object.
volatile long _M_exitCode
An indication of the exit code of the chore. Anything non-zero here indicates cancellation of one for...
Definition: concrt.h:5104
void _InternalDeleteHelper(_Ty *_PObject)
Definition: concrt.h:272
This class describes an exception thrown because of a failure to acquire a critical resource in the C...
Definition: concrt.h:1188
~_Scoped_lock()
Definition: concrt.h:798
::Concurrency::Scheduler * _M_pScheduler
Definition: concrt.h:385
bool _PerformedInlineCancel() const
Definition: concrt.h:4399
_MallocaArrayHolder()
Definition: concrt.h:1048
_CONCRTIMP const GUID ConcRTEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are not more specifically...
void _Lower()
Definition: concrt.h:5321
scoped_lock_read const & operator=(const scoped_lock_read &)
_In_ size_t _In_ int _Index
Definition: time.h:102
volatile long _M_flags
Definition: concrt.h:5124
unsigned __int64 * PDWORD_PTR
Definition: concrt.h:103
Indicates that the location represents a particular execution resource.
Definition: concrt.h:1960
_CONCRTIMP const GUID PPLParallelForeachEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to u...
Definition: pplinterface.h:224
_CONCRTIMP void _CheckTaskCollection()
_SpinWait _SpinWaitBackoffNone
Definition: concrt.h:759
void _PrepareStealUnstructured(ContextBase *_PContext)
An event type that represents the name for an object
Definition: concrt.h:5691
void *volatile _M_pTail
Definition: concrt.h:3646
unsigned int _M_reserved
Definition: concrt.h:2062
_CONCRTIMP void __cdecl _Trace_agents(Agents_EventType _Type, __int64 _AgentId,...)
_TaskCollectionStatus _Wait()
Waits for all chores running in the _StructuredTaskCollection to finish (normally or abnormally)...
Definition: concrt.h:4604
static _CONCRTIMP _Context __cdecl _CurrentContext()
void * _M_pCompletionContext
Definition: concrt.h:5131
_CONCRTIMP context_unblock_unbalanced()
Constructs a context_unblock_unbalanced object.
_NonReentrantPPLLock & operator=(const _NonReentrantPPLLock &)=delete
_CONCRTIMP bool try_lock_read()
Attempts to acquire the reader-writer lock as a reader without blocking.
_CONCRTIMP void unlock()
Unlocks the reader-writer lock based on who locked it, reader or writer.
_CONCRTIMP invalid_oversubscribe_operation()
Constructs an invalid_oversubscribe_operation object.
_CONCRT_BUFFER _M_node[(4 *sizeof(void *)+2 *sizeof(unsigned int)+sizeof(_CONCRT_BUFFER)-1)/sizeof(_CONCRT_BUFFER)]
Definition: concrt.h:3626
A non-reentrant mutex which is explicitly aware of the Concurrency Runtime.
Definition: concrt.h:3488
_TaskCollectionStatus _Wait()
Waits for all chores running in the _TaskCollection to finish (normally or abnormally). This method encapsulates all the running tasks in an exception handling block, and will re-throw any exceptions that occur in any of it tasks (if those exceptions occur on another thread, they are marshaled from that thread to the thread where the _TaskCollection was created, and re-thrown). After this function returns, the _TaskCollection cannot be used for scheduling further work.
Definition: concrt.h:4809
void _Switch_to_active(void *_PWriter)
The writer node allocated on the stack never really owns the lock because it would go out of scope an...
location & operator=(const location &_Rhs)
Assigns the contents of a different location object to this one.
Definition: concrt.h:1886
static _CONCRTIMP unsigned int __cdecl _Id()
_ReentrantPPLLock & operator=(const _ReentrantPPLLock &)=delete
_CONCRTIMP _ReentrantBlockingLock()
std::exception_ptr * _M_pException
Definition: concrt.h:4468
bool _SpinOnce()
Spins for one time quantum,until a maximum spin is reached.
Definition: concrt.h:626
__declspec(noinline) static void __cdecl _StructuredChoreWrapper(_UnrealizedChore *_PChore)
_GROUP_AFFINITY * PGROUP_AFFINITY
Definition: concrt.h:58
_CONCRT_BUFFER _M_lockNode[(4 *sizeof(void *)+2 *sizeof(unsigned int)+sizeof(_CONCRT_BUFFER)-1)/sizeof(_CONCRT_BUFFER)]
Definition: concrt.h:4155
int _M_stackPos
Definition: concrt.h:5128
bool _M_fRepeating
Definition: concrt.h:5372
_CONCRTIMP context_self_unblock()
Constructs a context_self_unblock object.
_CONCRTIMP _Scheduler(::Concurrency::Scheduler *_PScheduler=NULL)
Definition: concrt.h:379
void _Reset()
Resets the counts and state to the default.
Definition: concrt.h:718
_CONCRTIMP improper_scheduler_reference()
Constructs an improper_scheduler_reference object.
#define _Pre_maybenull_
Definition: sal.h:678
static void __cdecl _CancelViaToken(::Concurrency::details::ContextBase *_PContext)
An event type that represents the act of a detaching from a scheduler.
Definition: concrt.h:5495
void * _CONCRT_BUFFER
Definition: concrt.h:129
_CONCRTIMP bool _TryAcquire()
_Scoped_lock(_ReaderWriterLock &_Lock)
Definition: concrt.h:968
_CONCRTIMP void reset()
Resets the event to a non-signaled state.
void _YieldProcessor()
Definition: concrt.h:80
_Scoped_lock(_ReentrantBlockingLock &_Lock)
Definition: concrt.h:792
An event type that represents the conclusion of some processing
Definition: concrt.h:5661
#define _In_z_
Definition: sal.h:310
bool _IsCurrentlyInlined() const
Definition: concrt.h:4348
Definition: concrt.h:5629
_In_ wctype_t _Type
Definition: corecrt_wctype.h:111
void _Switch_to_active(void *_PLockingNode)
The node allocated on the stack never really owns the lock because it would go out of scope and the i...
_Beacon_reference * _M_pRef
Definition: concrt.h:5328
This class describes an exception thrown when the Attach method is called on a Scheduler object which...
Definition: concrt.h:1316
static _Ty _CompareAndSwap(volatile _Ty &_Location, _Ty _NewValue, _Ty _Comperand)
Definition: concrt.h:420
#define _Inout_opt_
Definition: sal.h:376
This class describes an exception thrown when an operation is performed which requires a scheduler to...
Definition: concrt.h:1290
void _PrepareSteal(ContextBase *_PContext)
This class describes an exception thrown when an operation has timed out.
Definition: concrt.h:1712
This class describes an exception thrown when there are tasks still scheduled to a task_group or stru...
Definition: concrt.h:1491
_CONCRTIMP ~_ReentrantBlockingLock()
Definition: concrt.h:4089
HANDLE _M_hTimer
Definition: concrt.h:5366
_TaskInliningMode
The enum defines inlining scheduling policy for ppltasks. Scheduling a chore or a functor with _TaskI...
Definition: pplinterface.h:221
_SpinState _M_state
Definition: concrt.h:755
bool _FastNodeIntersects(const location &_Rhs) const
Determines whether two locations have an intersection. This is a fast intersection which avoids certa...
_Ty operator++(int)
Definition: concrt.h:509
_CONCRTIMP const GUID ChoreEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to c...
_CONCRTIMP invalid_scheduler_policy_key()
Constructs an invalid_scheduler_policy_key object.
static unsigned int _S_spinCount
Definition: concrt.h:557
_CONCRTIMP _Context(::Concurrency::Context *_PContext=NULL)
Definition: concrt.h:367
This class describes an exception thrown when a task_handle object is scheduled multiple times using ...
Definition: concrt.h:1746
_CONCRTIMP _ReaderWriterLock()
bool _Is_signaled() const
Definition: concrt.h:5307
_CONCRTIMP void __cdecl Free(_Pre_maybenull_ _Post_invalid_ void *_PAllocation)
Releases a block of memory previously allocated by the Alloc method to the Concurrency Runtime Cachin...
~_Scoped_lock()
Definition: concrt.h:847
_ElemType _M_Elem
Definition: concrt.h:1149
critical_section & operator=(const critical_section &)
Hide assignment operator for a critical section
_ElemNodeType * _M_Next
Definition: concrt.h:1150
#define _SAFERWLIST_SIZE
Definition: concrt.h:131
Definition: concrt.h:4303
friend class _StructuredTaskCollection
Definition: concrt.h:4264
_Ty * _As() const
Returns the internal binding as a specified object.
Definition: concrt.h:2024
_CONCRTIMP void _Acquire(void *_Lock_node)
bool _FastVPIntersects(const location &_Rhs) const
Determines whether two locations have an intersection. This is a fast intersection which avoids certa...
unsigned long _M_currentYield
Definition: concrt.h:754
void _RegisterConcRTEventTracing()
Register ConcRT as an ETW Event Provider.
size_t _GetAllocationSize() const
Definition: concrt.h:1104
reader_writer_lock & _M_reader_writer_lock
Definition: concrt.h:3795
_CONCRTIMP nested_scheduler_missing_detach()
Constructs a nested_scheduler_missing_detach object.
void _Remove_last_writer(void *_PWriter)
When the last writer leaves the lock, it needs to reset the tail to NULL so that the next coming writ...
_SECURITY_ATTRIBUTES * LPSECURITY_ATTRIBUTES
Definition: concrt.h:55
_NonReentrantBlockingLock & _M_lock
Definition: concrt.h:906
bool _TaskCleanup()
Performs task cleanup normally done at destruction time.
Definition: concrt.h:4640
bool _ShouldSpinAgain()
Determines whether maximum spin has been reached
Definition: concrt.h:748
This class describes an exception thrown when a messaging block is unable to find a requested message...
Definition: concrt.h:1544
struct _Meta_at_< _Meta_list< _Types...>, _Idx, enable_if_t<(_Idx< sizeof...(_Types))> >:decltype(_Meta_at_impl< _Meta_repeat_n_c< _Idx, void * >>::_Eval(_Type_as_pointer< _Types >()...)){};template< class _List, class _Ty > struct _Meta_find_index_{};template< class _List, class _Ty > using _Meta_find_index=typename _Meta_find_index_< _List, _Ty >::type;constexpr auto _Meta_npos=static_cast< size_t >(-1);constexpr size_t _Meta_find_index_i_(bool const *const _Ptr, const size_t _Count, const size_t _Idx=0){return(_Idx >=_Count?_Meta_npos:_Ptr[_Idx]?_Idx:_Meta_find_index_i_(_Ptr, _Count, _Idx+1));}template< class _Ty > struct _Meta_find_index_< _Meta_list<>, _Ty >:integral_constant< size_t, _Meta_npos >{};template< class..._Types, class _Ty > struct _Meta_find_index_< _Meta_list< _Types...>, _Ty >{static constexpr bool _Bools[]={is_same< _Types, _Ty >::value...};using type=integral_constant< size_t, _Meta_find_index_i_(_Bools, sizeof...(_Types))>;};template< class _List, class _Ty > struct _Meta_find_unique_index_{};template< class _List, class _Ty > using _Meta_find_unique_index=typename _Meta_find_unique_index_< _List, _Ty >::type;constexpr size_t _Meta_find_unique_index_i_2(bool const *const _Ptr, const size_t _Count, const size_t _First){return(_First!=_Meta_npos &&_Meta_find_index_i_(_Ptr, _Count, _First+1)==_Meta_npos?_First:_Meta_npos);}constexpr size_t _Meta_find_unique_index_i_(bool const *const _Ptr, const size_t _Count){return(_Meta_find_unique_index_i_2(_Ptr, _Count, _Meta_find_index_i_(_Ptr, _Count)));}template< class _Ty > struct _Meta_find_unique_index_< _Meta_list<>, _Ty >:integral_constant< size_t, _Meta_npos >{};template< class..._Types, class _Ty > struct _Meta_find_unique_index_< _Meta_list< _Types...>, _Ty >{using type=integral_constant< size_t, _Meta_find_unique_index_i_(_Meta_find_index_< _Meta_list< _Types...>, _Ty >::_Bools, sizeof...(_Types))>;};template< class > struct _Meta_as_list_{};template< class _Ty > using _Meta_as_list=typename _Meta_as_list_< _Ty >::type;template< template< class > class _Template, class..._Types > struct _Meta_as_list_< _Template< _Types...> >{using type=_Meta_list< _Types...>;};template< class _Ty, _Ty..._Idxs > struct _Meta_as_list_< integer_sequence< _Ty, _Idxs...> >{using type=_Meta_list< integral_constant< _Ty, _Idxs >...>;};template< class _List > struct _Meta_as_integer_sequence_{};template< class _List > using _Meta_as_integer_sequence=typename _Meta_as_integer_sequence_< _List >::type;template< class _Ty, _Ty..._Idxs > struct _Meta_as_integer_sequence_< _Meta_list< integral_constant< _Ty, _Idxs >...> >{using type=integer_sequence< _Ty, _Idxs...>;};template< class...> struct _Meta_concat_{};template< class..._Types > using _Meta_concat=typename _Meta_concat_< _Types...>::type;template<> struct _Meta_concat_< _Meta_list<> >{using type=_Meta_list<>;};template< class..._Items1 > struct _Meta_concat_< _Meta_list< _Items1...> >{using type=_Meta_list< _Items1...>;};template< class..._Items1, class..._Items2 > struct _Meta_concat_< _Meta_list< _Items1...>, _Meta_list< _Items2...> >{using type=_Meta_list< _Items1..., _Items2...>;};template< class..._Items1, class..._Items2, class..._Items3 > struct _Meta_concat_< _Meta_list< _Items1...>, _Meta_list< _Items2...>, _Meta_list< _Items3...> >{using type=_Meta_list< _Items1..., _Items2..., _Items3...>;};template< class..._Items1, class..._Items2, class..._Items3, class..._Rest > struct _Meta_concat_< _Meta_list< _Items1...>, _Meta_list< _Items2...>, _Meta_list< _Items3...>, _Rest...>{using type=_Meta_concat< _Meta_list< _Items1..., _Items2..., _Items3...>, _Rest...>;};template< class _ListOfLists > using _Meta_join=_Meta_apply< _Meta_quote< _Meta_concat >, _ListOfLists >;template< class > struct _Meta_cartesian_product_{};template< class _ListOfLists > using _Meta_cartesian_product=typename _Meta_cartesian_product_< _ListOfLists >::type;template<> struct _Meta_cartesian_product_< _Meta_list<> >{using type=_Meta_list<>;};template< class..._Items > struct _Meta_cartesian_product_< _Meta_list< _Meta_list< _Items...> > >{using type=_Meta_list< _Meta_list< _Items >...>;};template< class..._Items, class..._Lists > struct _Meta_cartesian_product_< _Meta_list< _Meta_list< _Items...>, _Lists...> >{using type=_Meta_join< _Meta_list< _Meta_transform< _Meta_bind_back< _Meta_quote< _Meta_push_front >, _Items >, _Meta_cartesian_product< _Meta_list< _Lists...> > >...> >;};template< class..._Types > class variant;template< class _Ty > struct variant_size;template< class _Ty > struct variant_size< const _Ty >:variant_size< _Ty >::type{};template< class _Ty > struct variant_size< volatile _Ty >:variant_size< _Ty >::type{};template< class _Ty > struct variant_size< const volatile _Ty >:variant_size< _Ty >::type{};template< class _Ty > constexpr size_t variant_size_v=variant_size< _Ty >::value;template< class..._Types > struct variant_size< variant< _Types...> >:integral_constant< size_t, sizeof...(_Types)>{};template< size_t _Idx, class _Ty > struct variant_alternative;template< size_t _Idx, class _Ty > using variant_alternative_t=typename variant_alternative< _Idx, _Ty >::type;template< size_t _Idx, class _Ty > struct variant_alternative< _Idx, const _Ty >{using type=add_const_t< variant_alternative_t< _Idx, _Ty > >;};template< size_t _Idx, class _Ty > struct variant_alternative< _Idx, volatile _Ty >{using type=add_volatile_t< variant_alternative_t< _Idx, _Ty > >;};template< size_t _Idx, class _Ty > struct variant_alternative< _Idx, const volatile _Ty >{using type=add_cv_t< variant_alternative_t< _Idx, _Ty > >;};template< size_t _Idx, class..._Types > struct variant_alternative< _Idx, variant< _Types...> >{using type=_Meta_at_c< _Meta_list< _Types...>, _Idx >;};constexpr auto variant_npos=_Meta_npos;class bad_variant_access:public exception{public:bad_variant_access() _NOEXCEPT=default;virtual const char *__CLR_OR_THIS_CALL what() const _NOEXCEPT override{return("bad variant access");}protected:virtual void _Doraise() const {_RAISE(*this);}};struct _Variant_uses_allocator_t{};template< class _Ty, class=void > struct _Variant_item{remove_cv_t< _Ty > _Elem;template< class..._Types >constexpr explicit _Variant_item(_Types &&..._Args):_Elem(_STD forward< _Types >(_Args)...){}template< class _Alloc, class..._Types, enable_if_t< uses_allocator< _Ty, _Alloc >::value &&is_constructible< _Ty, allocator_arg_t, const _Alloc &, _Types...>::value, int >=0 >constexpr _Variant_item(_Variant_uses_allocator_t, const _Alloc &_Al, _Types &&..._Args):_Elem(allocator_arg, _Al, _STD forward< _Types >(_Args)...){}template< class _Alloc, class..._Types, enable_if_t< uses_allocator< _Ty, _Alloc >::value &&!is_constructible< _Ty, allocator_arg_t, const _Alloc &, _Types...>::value, int >=0 >constexpr _Variant_item(_Variant_uses_allocator_t, const _Alloc &_Al, _Types &&..._Args):_Elem(_STD forward< _Types >(_Args)..., _Al){}template< class _Alloc, class..._Types, enable_if_t<!uses_allocator< _Ty, _Alloc >::value, int >=0 >constexpr _Variant_item(_Variant_uses_allocator_t, const _Alloc &, _Types &&..._Args):_Elem(_STD forward< _Types >(_Args)...){}_CONSTEXPR14 _Ty &get()&{return(_Elem);}constexpr const _Ty &get() const &{return(_Elem);}_CONSTEXPR14 _Ty &&get()&&{return(_STD move(_Elem));}constexpr const _Ty &&get() const &&{return(_STD move(_Elem));}};template< bool _TrivialDestruction, class..._Types > class _Variant_storage_{};template< class..._Types > using _Variant_storage=_Variant_storage_< conjunction< is_trivially_destructible< _Variant_item< _Types > >...>::value, _Types...>;template< class _First, class..._Rest > class _Variant_storage_< true, _First, _Rest...>{public:static constexpr size_t _Size=1+sizeof...(_Rest);union{_Variant_item< _First > _Head;_Variant_storage< _Rest...> _Tail;};_Variant_storage_() _NOEXCEPT{}template< class..._Types >constexpr explicit _Variant_storage_(integral_constant< size_t, 0 >, _Types &&..._Args):_Head(_STD forward< _Types >(_Args)...){}template< size_t _Idx, class..._Types >constexpr explicit _Variant_storage_(integral_constant< size_t, _Idx >, _Types &&..._Args) _NOEXCEPT_OP((is_nothrow_constructible< _Variant_storage< _Rest...>, integral_constant< size_t, _Idx-1 >, _Types...>::value)):_Tail(integral_constant< size_t, _Idx-1 >{}, _STD forward< _Types >(_Args)...){}_Variant_storage_(_Variant_storage_ &&)=default;_Variant_storage_(const _Variant_storage_ &)=default;_Variant_storage_ &operator=(_Variant_storage_ &&)=default;_Variant_storage_ &operator=(const _Variant_storage_ &)=default;};template< class _First, class..._Rest > class _Variant_storage_< false, _First, _Rest...>{public:static constexpr size_t _Size=1+sizeof...(_Rest);union{_Variant_item< _First > _Head;_Variant_storage< _Rest...> _Tail;};~_Variant_storage_() _NOEXCEPT{}_Variant_storage_() _NOEXCEPT{}template< class..._Types >constexpr explicit _Variant_storage_(integral_constant< size_t, 0 >, _Types &&..._Args):_Head(_STD forward< _Types >(_Args)...){}template< size_t _Idx, class..._Types >constexpr explicit _Variant_storage_(integral_constant< size_t, _Idx >, _Types &&..._Args) _NOEXCEPT_OP((is_nothrow_constructible< _Variant_storage< _Rest...>, integral_constant< size_t, _Idx-1 >, _Types...>::value)):_Tail(integral_constant< size_t, _Idx-1 >{}, _STD forward< _Types >(_Args)...){}_Variant_storage_(_Variant_storage_ &&)=default;_Variant_storage_(const _Variant_storage_ &)=default;_Variant_storage_ &operator=(_Variant_storage_ &&)=default;_Variant_storage_ &operator=(const _Variant_storage_ &)=default;};template< size_t _Idx, class _Storage, enable_if_t< _Idx==0, int >=0 > constexpr decltype(auto) _Variant_raw_get(_Storage &&_Obj){return(_STD forward< _Storage >(_Obj)._Head);}template< size_t _Idx, class _Storage, enable_if_t< _Idx!=0, int >=0 > constexpr decltype(auto) _Variant_raw_get(_Storage &&_Obj){return(_Variant_raw_get< _Idx-1 >(_STD forward< _Storage >(_Obj)._Tail));}template< class _Storage, class _Fn > using _Variant_visit_raw_t=decltype(_STD declval< _Fn >()(integral_constant< size_t, 0 >{}, _Variant_raw_get< 0 >(_STD declval< _Storage >())));template< class _Storage, class _Fn, size_t _Idx > constexpr _Variant_visit_raw_t< _Storage, _Fn > _Variant_visit_raw_dispatch(_Storage &&_Obj, _Fn &&_Func){return(_STD forward< _Fn >(_Func)(integral_constant< size_t, _Idx >{}, _Variant_raw_get< _Idx >(_STD forward< _Storage >(_Obj))));}template< class _Storage, class _Fn, class _Indices > struct _Variant_raw_dispatch_table_;template< class _Storage, class _Fn > using _Variant_raw_dispatch_table=_Variant_raw_dispatch_table_< _Storage, _Fn, make_index_sequence< remove_reference_t< _Storage >::_Size > >;template< class _Storage, class _Fn, size_t..._Idxs > struct _Variant_raw_dispatch_table_< _Storage, _Fn, index_sequence< _Idxs...> >{using _Dispatch_t=_Variant_visit_raw_t< _Storage, _Fn >(*)(_Storage &&, _Fn &&);static constexpr _Dispatch_t _Array[]={&_Variant_visit_raw_dispatch< _Storage, _Fn, _Idxs >...};};template< class _Storage, class _Fn, size_t..._Idxs > constexpr typename _Variant_raw_dispatch_table_< _Storage, _Fn, index_sequence< _Idxs...> >::_Dispatch_t_Variant_raw_dispatch_table_< _Storage, _Fn, index_sequence< _Idxs...> >::_Array[];template< class _Storage, class _Fn, size_t..._Idxs > _CONSTEXPR14 _Variant_visit_raw_t< _Storage, _Fn > _Variant_visit_raw1(const size_t _Idx, _Storage &&_Obj, _Fn &&_Func, index_sequence< _Idxs...>){if(_Idx >=sizeof...(_Idxs)){_THROW_NCEE(bad_variant_access, _EMPTY_ARGUMENT);}constexpr auto &_Array=_Variant_raw_dispatch_table< _Storage, _Fn >::_Array;return(_Array[_Idx](_STD forward< _Storage >(_Obj), _STD forward< _Fn >(_Func)));}template< class _Storage, class _Fn > _CONSTEXPR14 _Variant_visit_raw_t< _Storage, _Fn > _Variant_visit_raw(const size_t _Idx, _Storage &&_Obj, _Fn &&_Func){return(_Variant_visit_raw1(_Idx, _STD forward< _Storage >(_Obj), _STD forward< _Fn >(_Func), make_index_sequence< remove_reference_t< _Storage >::_Size >{}));}template< size_t _Count > using _Variant_index_t=conditional_t<(_Count< static_cast< size_t >((numeric_limits< signed char >::max)())), signed char, conditional_t<(_Count< static_cast< size_t >((numeric_limits< short >::max)())), short, int > >;template< class..._Types > class _Variant_base:private _Variant_storage< _Types...>{public:using _Index_t=_Variant_index_t< sizeof...(_Types)>;static constexpr auto _Invalid_index=static_cast< _Index_t >(-1);_Index_t _Which;using _Storage_t=_Variant_storage< _Types...>;_CONSTEXPR14 _Storage_t &_Storage()&_NOEXCEPT{return(*this);}constexpr const _Storage_t &_Storage() const &_NOEXCEPT{return(*this);}_CONSTEXPR14 _Storage_t &&_Storage()&&_NOEXCEPT{return(_STD move(*this));}constexpr const _Storage_t &&_Storage() const &&_NOEXCEPT{return(_STD move(*this));}_Variant_base():_Storage_t{}, _Which{_Invalid_index}{}template< size_t _Idx, class..._UTypes, enable_if_t< is_constructible< _Variant_item< _Meta_at_c< _Meta_list< _Types...>, _Idx > >, _UTypes...>::value, int >=0 >constexpr explicit _Variant_base(in_place_index_t< _Idx >, _UTypes &&..._Args):_Storage_t(integral_constant< size_t, _Idx >{}, _STD forward< _UTypes >(_Args)...), _Which{static_cast< _Index_t >(_Idx)}{}constexpr bool valueless_by_exception() const _NOEXCEPT{return(_Which< 0);}constexpr size_t index() const _NOEXCEPT{return(static_cast< size_t >(_Which));}void _Set_index(const size_t _Idx){_Which=static_cast< _Index_t >(_Idx);}void _Reset() _NOEXCEPT{if(!this->valueless_by_exception()){_Reset1(_Conjunction_t< is_trivially_destructible< _Variant_item< _Types >>...>{});this->_Set_index(variant_npos);}}private:void _Reset1(true_type) _NOEXCEPT{}void _Reset1(false_type) _NOEXCEPT{_Variant_visit_raw(index(), _Storage(), [](auto, auto &_Obj){_Destroy_in_place(_Obj);});}};template< bool _AllTriviallyDestructible, class..._Types > struct _Variant_destroy_layer_;template< class..._Types > using _Variant_destroy_layer=_Variant_destroy_layer_< conjunction< is_trivially_destructible< _Variant_item< _Types > >...>::value, _Types...>;template< class..._Types > struct _Variant_destroy_layer_< true, _Types...>:_Variant_base< _Types...>{using _Variant_base< _Types...>::_Variant_base;};template< class..._Types > struct _Variant_destroy_layer_< false, _Types...>:_Variant_base< _Types...>{using _Variant_base< _Types...>::_Variant_base;~_Variant_destroy_layer_() _NOEXCEPT{this->_Reset();}};template< class..._Types > struct _Variant_construct_visitor{_Variant_base< _Types...> &_Self;template< class _Idx, class _Ty >void operator()(_Idx, _Ty &&_Source) const {_Construct_in_place(_Variant_raw_get< _Idx::value >(_Self._Storage()), _STD forward< _Ty >(_Source).get());_Self._Set_index(_Idx::value);}};template< class..._Types > struct _Variant_move_assign_visitor{_Variant_base< _Types...> &_Self;template< class _Idx, class _Ty >void operator()(_Idx, _Ty &&_Source) const {_Variant_raw_get< _Idx::value >(_Self._Storage()).get()=_STD forward< _Ty >(_Source).get();}};template< class..._Types > struct _Variant_direct_copy_assign_visitor{_Variant_destroy_layer< _Types...> &_Self;template< class _Idx, class _Ty >void operator()(_Idx, const _Ty &_Source) const {_Variant_raw_get< _Idx::value >(_Self._Storage()).get()=_Source.get();}};template< class..._Types > struct _Variant_indirect_copy_assign_visitor{_Variant_destroy_layer< _Types...> &_Self;template< class _Idx, class _Ty >void operator()(_Idx, const _Ty &_Source) const {auto _Temporary=_Source;_Self._Reset();_Construct_in_place(_Variant_raw_get< _Idx::value >(_Self._Storage()), _STD move(_Temporary));_Self._Set_index(_Idx::value);}};template< bool _UseTrivialSMFs, class..._Types > struct _Variant_copymove_layer_;template< class..._Types > using _Variant_copymove_layer=_Variant_copymove_layer_< conjunction< is_trivially_copyable< _Variant_item< _Types > >..., negation< is_reference< _Types > >...>::value, _Types...>;template< class..._Types > struct _Variant_copymove_layer_< true, _Types...>:_Variant_destroy_layer< _Types...>{using _Variant_destroy_layer< _Types...>::_Variant_destroy_layer;};template< class..._Types > struct _Variant_copymove_layer_< false, _Types...>:_Variant_destroy_layer< _Types...>{using _Variant_destroy_layer< _Types...>::_Variant_destroy_layer;_Variant_copymove_layer_()=default;_Variant_copymove_layer_(const _Variant_copymove_layer_ &_That){if(!_That.valueless_by_exception()){_Variant_visit_raw(_That.index(), _That._Storage(), _Variant_construct_visitor< _Types...>{*this});}}_Variant_copymove_layer_(_Variant_copymove_layer_ &&_That) _NOEXCEPT_OP(conjunction< is_nothrow_move_constructible< _Types >...>::value){if(!_That.valueless_by_exception()){_Variant_visit_raw(_That.index(), _STD move(_That)._Storage(), _Variant_construct_visitor< _Types...>{*this});}}_Variant_copymove_layer_ &operator=(const _Variant_copymove_layer_ &_That){if(this->_Which==_That._Which){if(!this->valueless_by_exception()){_Variant_visit_raw(_That.index(), _That._Storage(), _Variant_direct_copy_assign_visitor< _Types...>{*this});}}else{if(_That.valueless_by_exception()){this-> _Reset()
Definition: variant:942
::Concurrency::critical_section _M_criticalSection
Definition: concrt.h:4124
_CONCRTIMP void _Acquire()
::Concurrency::details::_TaskCollectionBase * _M_pTaskCollection
Definition: concrt.h:4269
Definition: concrt.h:5341
_CONCRTIMP bool _IsSynchronouslyBlocked() const
_CONCRT_BUFFER _M_writerNode[(4 *sizeof(void *)+2 *sizeof(unsigned int)+sizeof(_CONCRT_BUFFER)-1)/sizeof(_CONCRT_BUFFER)]
Definition: concrt.h:3796
_RefCounterBase(long _InitialCount=1)
Definition: concrt.h:4075
_CONCRTIMP const _CONCRT_TRACE_INFO * _GetConcRTTraceInfo()
Retrieves a pointer to the internal trace flags and level information for the Concurrency runtime ETW...
_CONCRTIMP _Scoped_lock(_ReentrantPPLLock &_Lock)
_CRT_BEGIN_C_HEADER typedef void(__CRTDECL *terminate_handler)()
_Type _GetType() const
Returns the type which this location object represents.
Definition: concrt.h:2042
_In_ size_t _Out_opt_ int _In_z_ unsigned char const * _Src
Definition: mbstring.h:1039
void _Flush_current_owner()
Guarantees that if any context holds the lock at the time the method is called, that context has rele...
_ReentrantBlockingLock & _M_lock
Definition: concrt.h:803
An event type that marks the beginning of a start/end event pair.
Definition: concrt.h:5460
Definition: pplcancellation_token.h:106
_CONCRTIMP invalid_scheduler_policy_thread_specification()
Constructs an invalid_scheduler_policy_value object.
_Ty operator--(int)
Definition: concrt.h:517
unsigned int _GetId() const
Returns the ID which this location object represents.
Definition: concrt.h:2033
~_Scoped_lock_read()
Definition: concrt.h:998
_TaskCollectionBase()
Definition: concrt.h:4313
An event type that represents the scheduling of a process
Definition: concrt.h:5673
_CONCRTIMP ~_NonReentrantBlockingLock()
char int *typedef int(__CRTDECL *_CRT_REPORT_HOOKW)(int
Definition: crtdbg.h:45
void _Unlock_writer()
Called from unlock() when a writer is holding the lock. Writer unblocks the next writer in the list a...
#define LONG_MIN
Definition: limits.h:37
_Ty operator+=(_Ty _Addend)
Definition: concrt.h:521
unsigned long _M_currentSpin
Definition: concrt.h:753
Definition: concrt.h:5634
bool _GetRuntimeOwnsLifetime() const
Definition: concrt.h:4232
TaskProc _M_completionHandler
Definition: concrt.h:5130
_TaskCollectionStatus
Definition: concrt.h:4301
_ReaderWriterLock & _M_lock
Definition: concrt.h:981
_CONCRTIMP HRESULT get_error_code() const
Returns the error code that caused the exception.
bool _PerformedPendingCancel() const
Definition: concrt.h:4405
_TaskCollectionBaseState
Definition: concrt.h:4367
Definition: concrt.h:1146
Definition: concrt.h:5379
_CancellationTokenState * _M_pTokenState
Definition: concrt.h:4449
Definition: concrt.h:4197
::Concurrency::details::_TaskCollectionBase * _OwningCollection() const
Definition: concrt.h:4218
reader_writer_lock & operator=(const reader_writer_lock &_Lock)
Hide assignment operator for a reader_writer_lock
_Scoped_lock & operator=(const _Scoped_lock &)=delete
_CONCRTIMP operation_timed_out()
Constructs an operation_timed_out object.
unsigned __int64 DWORD_PTR
Definition: concrt.h:103
const unsigned int COOPERATIVE_TIMEOUT_INFINITE
Value indicating that a wait should never time out.
Definition: concrt.h:3478
_Chore(TaskProc _PFunction)
Definition: concrt.h:4176
unsigned long DWORD
Definition: concrt.h:63
_CONCRTIMP void _Acquire()
void _SetRuntimeOwnsLifetime(bool _FValue)
Definition: concrt.h:4225
_ElemType * _M_ElemArray
Definition: concrt.h:1088
This class describes an exception thrown when the Unblock method of a Context object is called from t...
Definition: concrt.h:1455
This class describes an exception thrown because of a failure to create a worker execution context in...
Definition: concrt.h:1235
~_StackGuard()
Definition: concrt.h:5150
bool _M_fDetached
Definition: concrt.h:4279
An event type that represents the initiation of some processing
Definition: concrt.h:5655
void * _M_pBinding
Definition: concrt.h:2079
_In_reads_(_N) wchar_t const *_S2
void _EnableTrace(unsigned char _Level, unsigned long _Flags)
Definition: concrt.h:5384
An event type that represents the deletion of an object
Definition: concrt.h:5667
_CONCRTIMP ~scoped_lock()
Destroys a scoped_lock object and releases the critical section supplied in its constructor.
Task collections represent groups of work which step outside the strict structuring of the _Structure...
Definition: concrt.h:4702
_CONCRTIMP _NonReentrantPPLLock()
~_Scoped_lock()
Definition: concrt.h:974
unsigned int _GetBindingId() const
Gets the binding ID for this location.
Definition: concrt.h:2051
volatile long _M_completedStolenChores
Definition: concrt.h:4459
void _UnregisterConcRTEventTracing()
Unregister ConcRT as an ETW Event Provider.
An event type that represents the act of a context becoming idle.
Definition: concrt.h:5485
::Concurrency::Context * _M_pContext
Definition: concrt.h:373
unsigned int _M_type
Definition: concrt.h:2059
An abstraction of a physical location on hardware.
Definition: concrt.h:1825
static _CONCRTIMP location __cdecl current()
Returns a location object representing the most specific place the calling thread is executing...
_CONCRTIMP missing_wait()
Constructs a missing_wait object.
_CONCRTIMP invalid_scheduler_policy_value()
Constructs an invalid_scheduler_policy_value object.
_CONCRTIMP _ReentrantLock()
_CONCRTIMP bad_target()
Constructs a bad_target object.
_CONCRTIMP void _Acquire()
This class describes an exception thrown when the CurrentScheduler::Detach method is called on a cont...
Definition: concrt.h:1343
_Scoped_lock const & operator=(const _Scoped_lock &)
_CONCRTIMP const GUID SchedulerEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to s...
_CONCRTIMP size_t wait(unsigned int _Timeout=COOPERATIVE_TIMEOUT_INFINITE)
Waits for the event to become signaled.
_Scoped_lock(_ReentrantLock &_Lock)
Definition: concrt.h:841
_Scoped_lock const & operator=(const _Scoped_lock &)
_ReentrantLock & _M_lock
Definition: concrt.h:852
bool _Set_next_writer(void *_PWriter)
Called for the first context in the writer queue. It sets the queue head and it tries to claim the lo...
_CONCRTIMP invalid_multiple_scheduling()
Constructs an invalid_multiple_scheduling object.
_CONCRT_BUFFER _M_activeNode[(4 *sizeof(void *)+2 *sizeof(unsigned int)+sizeof(_CONCRT_BUFFER)-1)/sizeof(_CONCRT_BUFFER)]
Definition: concrt.h:3644
_TaskCollection * _M_pNextAlias
Definition: concrt.h:5119
void _Invoke()
Definition: concrt.h:4209
_Scoped_lock const & operator=(const _Scoped_lock &)
static _Ty _Increment(volatile _Ty &_Location)
Definition: concrt.h:430
bool _Is_system() const
Internal routine that tells whether a location represents the "system location". This indicates no sp...
Definition: concrt.h:2014
Definition: concrt.h:4309
An event type that represents the act of a context yielding.
Definition: concrt.h:5480
_Scoped_lock const & operator=(const _Scoped_lock &)
bool _Acquire_lock(void *_PLockingNode, bool _FHasExternalNode)
Acquires this critical section given a specific node to lock.
_CONCRTIMP const GUID AgentEventGuid
A category GUID ({B9B5B78C-0713-4898-A21A-C67949DCED07}) describing ETW events fired by the Agents li...
void _Acquire_lock(void *_PLockingNode, bool _FHasExternalNode)
Acquires a write lock given a specific write node to lock.
This class describes an exception thrown when the Concurrency Runtime detects that you neglected to c...
Definition: concrt.h:1689
_ElemType * _AddRawMallocaNode(void *_MallocaRet)
Definition: concrt.h:1124
void _Cancel()
Cancels work on the task collection.
Definition: concrt.h:5239
_In_ _Value
Definition: corecrt_wstdlib.h:65
This class describes an exception thrown when an unsupported operating system is used.
Definition: concrt.h:1264
location()
Constructs a location object.
Definition: concrt.h:1836
bool _M_fRuntimeOwnsLifetime
Definition: concrt.h:4276
_CONCRTIMP void unlock()
Unlocks the critical section.
An exception safe RAII wrapper that can be used to acquire reader_writer_lock lock objects as a write...
Definition: concrt.h:3774
static _CONCRTIMP location __cdecl _Current_node()
Returns a location representing the scheduling node that the calling thread is executing.
reader_writer_lock & _M_reader_writer_lock
Definition: concrt.h:3828
_StackGuard()
Definition: concrt.h:5141
void * _M_ptr
Definition: concrt.h:2074
Definition: concrt.h:1018
static const unsigned int timeout_infinite
Value indicating that a wait should never time out.
Definition: concrt.h:4016
volatile long _M_executionStatus
The status of the task collection.
Definition: concrt.h:5110
static void _StoreWithRelease(volatile _Ty &_Location, _Ty _Rhs)
Definition: concrt.h:406
_TaskCollectionBase * _SafeGetParent()
Definition: concrt.h:4412
_MallocaArrayHolder & operator=(const _MallocaArrayHolder &)
static void _InternalFree(_UnrealizedChore *_PChore)
Definition: pplcancellation_token.h:221
_CONCRTIMP void set()
Signals the event.
volatile unsigned char EnableLevel
Definition: concrt.h:5382
virtual ~_MallocaArrayHolder()
Definition: concrt.h:1078
volatile long _M_numberOfWriters
Definition: concrt.h:1030
bool _IsStructured()
Definition: concrt.h:4354
_CONCRTIMP const GUID ScheduleGroupEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to s...
_CONCRTIMP default_scheduler_exists()
Constructs a default_scheduler_exists object.
long __cdecl _InterlockedDecrement(long volatile *)
_TaskCollection * _M_pOriginalCollection
Definition: concrt.h:5118
_CONCRTIMP void _ReleaseWrite()
::Concurrency::critical_section _M_lock
Definition: concrt.h:4025
_CONCRTIMP void lock()
Acquires this critical section.
void * _Get_reader_convoy()
Called when writers are done with the lock, or when lock was free for claiming by the first reader co...
void * _M_pResetChain
Definition: concrt.h:4024
Definition: concrt.h:1019
_Type
Describes the type of the given location.
Definition: concrt.h:1940
#define _CONCRTIMP
Definition: crtdefs.h:48
unsigned int _CONCRTIMP __cdecl _GetConcurrency()
Returns the hardware concurrency available to the Concurrency Runtime, taking into account process af...
_CONCRTIMP void _AcquireRead()
_State
Definition: concrt.h:1016
void _SetDetached(bool _FDetached)
void _DoYield()
Yields its time slice using the specified yieldFunction
Definition: concrt.h:697
long _Release()
Definition: concrt.h:4053
_CONCRTIMP bool try_lock()
Attempts to acquire the reader-writer lock as a writer without blocking.
_Diff _Count
Definition: algorithm:1941
_CONCRTIMP const GUID ResourceManagerEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to t...
volatile long _M_chaining
Definition: concrt.h:5125
Definition: concrt.h:5631
_Ty operator++()
Definition: concrt.h:505
static _CONCRTIMP unsigned int __cdecl _GetNumberOfVirtualProcessors()
Indicates that the location represents the "system location". This has no specific affinity...
Definition: concrt.h:1945
_CONCRTIMP _Scoped_lock(_NonReentrantPPLLock &_Lock)
An exception safe RAII wrapper that can be used to acquire reader_writer_lock lock objects as a reade...
Definition: concrt.h:3806
void *volatile _M_pWaitChain
Definition: concrt.h:4023
static _CONCRTIMP size_t __cdecl wait_for_multiple(_In_reads_(_Count) event **_PPEvents, size_t _Count, bool _FWaitAll, unsigned int _Timeout=COOPERATIVE_TIMEOUT_INFINITE)
Waits for multiple events to become signaled.
void * _M_pWriterHead
Definition: concrt.h:3898
_CONCRTIMP unsigned int _Reference()
_CONCRTIMP bool _TryAcquire()
size_t & _Depth
Definition: concrt.h:5163
unsigned long _NumberOfSpins()
Determines the current spin count
Definition: concrt.h:736
_ReentrantPPLLock & _M_lock
Definition: concrt.h:4154
volatile long _M_refCount
Definition: concrt.h:4081
This class describes an exception thrown when the Scheduler::SetDefaultSchedulerPolicy method is call...
Definition: concrt.h:1396
volatile _Ty _M_value
Definition: concrt.h:485
_ElemNodeType * _M_FirstNode
Definition: concrt.h:1159
_CONCRTIMP ~reader_writer_lock()
Destroys the reader_writer_lock object.
Definition: concrt.h:4144
_CONCRTIMP ~scoped_lock()
Destroys a reader_writer_lock object and releases the lock supplied in its constructor.
_CONCRTIMP unsupported_os()
Constructs an unsupported_os object.
void _Initialize(_ElemType *_Elem)
Definition: concrt.h:1051
_Chore()
Definition: concrt.h:4180
A manual reset event which is explicitly aware of the Concurrency Runtime.
Definition: concrt.h:3922
_CRT_MANAGED_FP_DEPRECATE _In_ unsigned int _Mask
Definition: float.h:235
virtual ~_UnrealizedChore()
Definition: concrt.h:4205
void _SetSpinCount(unsigned int _Count)
Set a dynamic spin count.
Definition: concrt.h:598
Definition: concrt.h:1044
long __cdecl _InterlockedIncrement(long volatile *)
_CONCRTIMP improper_scheduler_attach()
Constructs an improper_scheduler_attach object.
unsigned int _M_id
Definition: concrt.h:2071
static _Ty _FetchAndAdd(volatile _Ty &_Location, _Ty _Addend)
Definition: concrt.h:425
This class describes an exception thrown when a policy key of a SchedulerPolicy object is set to an i...
Definition: concrt.h:1627
_Scoped_lock_read(_ReaderWriterLock &_Lock)
Definition: concrt.h:992
An exception safe RAII wrapper for a critical_section object.
Definition: concrt.h:3601
event & operator=(const event &_Event)
const size_t COOPERATIVE_WAIT_TIMEOUT
Value indicating that a wait timed out.
Definition: concrt.h:3469
_CONCRTIMP _SpinLock(volatile long &_Flag)
_CONCRTIMP::Concurrency::Scheduler * _GetScheduler()
Definition: concrt.h:382
bool _IsAbnormalExit() const
Definition: concrt.h:4381
bool operator==(const location &_Rhs) const
Determines whether two location objects represent the same location.
Definition: concrt.h:1907
_CONCRTIMP invalid_link_target()
Constructs an invalid_link_target object.
#define SIZE_MAX
Definition: limits.h:76
char * va_list
Definition: vadefs.h:39
_CONCRTIMP critical_section()
Constructs a new critical section.
Internal maintenance structure for beacons.
Definition: concrt.h:5285
Definition: concrt.h:5636
volatile long _M_state
Definition: concrt.h:1025
_Ty _CompareAndSwap(_Ty _NewValue, _Ty _Comperand)
Definition: concrt.h:497
An event type that represents the act of a context blocking.
Definition: concrt.h:5470
_CONCRTIMP message_not_found()
Constructs a message_not_found object.
_CONCRTIMP void _AcquireWrite()
void _CONCRTIMP __cdecl _UnderlyingYield()
Default method for yielding during a spin wait
unsigned int _M_bindingId
Definition: concrt.h:2065
_StructuredTaskCollection()
Construct a new structured task collection.
Definition: concrt.h:4503
scoped_lock const & operator=(const scoped_lock &)
_CONCRT_BUFFER _M_activeWriter[(4 *sizeof(void *)+2 *sizeof(unsigned int)+sizeof(_CONCRT_BUFFER)-1)/sizeof(_CONCRT_BUFFER)]
Definition: concrt.h:3896
long __cdecl _InterlockedCompareExchange(long volatile *, long, long)
static _CONCRTIMP void __cdecl _Oversubscribe(bool _BeginOversubscription)
_MallocaListHolder()
Definition: concrt.h:1109
static void __cdecl _InvokeBridge(void *_PContext)
Definition: concrt.h:4253
virtual void _Destroy()
Definition: concrt.h:4069
void * _M_pWriterTail
Definition: concrt.h:3899
_CONCRTIMP improper_lock()
Constructs an improper_lock exception.
_Scoped_lock_read const & operator=(const _Scoped_lock_read &)
_CONCRT_BUFFER _M_lockNode[(4 *sizeof(void *)+2 *sizeof(unsigned int)+sizeof(_CONCRT_BUFFER)-1)/sizeof(_CONCRT_BUFFER)]
Definition: concrt.h:4119
void * HANDLE
Definition: concrt.h:72
event _M_event
An event on which to wait for stolen chores to complete.
Definition: concrt.h:5116
Definition: concrt.h:5630
_CONCRTIMP ~critical_section()
Destroys a critical section.
typedef _Return_type_success_(return >=0) long HRESULT
volatile long _M_lockState
Definition: concrt.h:3900
#define NULL
Definition: corecrt.h:158
Definition: concrt.h:4105
_CONCRTIMP const GUID LockEventGuid
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to l...
volatile long _M_owner
Definition: concrt.h:860
void * _OwningContext() const
Definition: concrt.h:4336
static _ChoreType * _InternalAlloc(const _Function &_Func)
Definition: concrt.h:4239
_CONCRTIMP bool try_lock()
Tries to acquire the lock without blocking.
This class describes an exception thrown when the Context::Oversubscribe method is called with the _B...
Definition: concrt.h:1772
static _CONCRTIMP _Scheduler __cdecl _Get()
_SpinState
State of the spin wait class.
Definition: concrt.h:684
_Ty operator--()
Definition: concrt.h:513
_CONCRTIMP void lock_read()
Acquires the reader-writer lock as a reader. If there are writers, active readers have to wait until ...
_CONCRTIMP bool _TryAcquireWrite()