eşzamanlılık ad alanı işlevleri
Alloc
asend
cancel_current_task
clear
create_async
create_task
CreateResourceManager
DisableTracing
EnableTracing
Free
get_ambient_scheduler
GetExecutionContextId
GetOSVersion
GetProcessorCount
GetProcessorNodeCount
Ayırma
Eşzamanlılık Çalışma Zamanı Önbelleğe Alma Alt Bulucusundan belirtilen boyutta bir bellek bloğu ayırır.
void* __cdecl Alloc(size_t _NumBytes);
Parametreler
_NumBytes
Ayrılacak bellek bayt sayısı.
Dönüş Değeri
Yeni ayrılan belleğin işaretçisi.
Açıklamalar
Uygulamanızdaki hangi senaryoların Önbelleğe Alma Alt Bulucu'nun kullanılmasından yararlanabileceği hakkında daha fazla bilgi için bkz . Görev Zamanlayıcı.
asend
Verileri hedef bloğa yaymak için bir görev zamanlayan zaman uyumsuz gönderme işlemi.
template <class T>
bool asend(
_Inout_ ITarget<T>* _Trg,
const T& _Data);
template <class T>
bool asend(
ITarget<T>& _Trg,
const T& _Data);
Parametreler
T
Gönderilecek verilerin türü.
_Trg
Verilerin gönderildiği hedefe ilişkin bir işaretçi veya başvuru.
_Veri
Gönderilecek verilere başvuru.
Dönüş Değeri
true
yöntemi döndürülmeden önce ileti kabul edildiyse, false
aksi takdirde.
Açıklamalar
Daha fazla bilgi için bkz . İleti Geçirme İşlevleri.
cancel_current_task
Şu anda yürütülen görevi iptal eder. Bu işlev, görevin yürütülmesini durdurmak ve duruma girmesine canceled
neden olmak için görevin gövdesinden çağrılabilir.
gövdesinde değilseniz bu işlevi çağırmak desteklenen bir task
senaryo değildir. Bunun yapılması, uygulamanızda kilitlenme veya yanıt vermeme gibi tanımsız davranışlara neden olur.
inline __declspec(noreturn) void __cdecl cancel_current_task();
berrak
Eşzamanlı kuyruğu temizleyerek şu anda sıralanan öğeleri yok eder. Bu yöntem eşzamanlılık açısından güvenli değildir.
template<typename T, class _Ax>
void concurrent_queue<T, _Ax>::clear();
Parametreler
T
_Balta
create_async
Kullanıcı tarafından sağlanan lambda veya işlev nesnesini temel alan Windows Çalışma Zamanı zaman uyumsuz bir yapı oluşturur. dönüş türü create_async
IAsyncAction^
, , IAsyncActionWithProgress<TProgress>^
, IAsyncOperation<TResult>^
veya IAsyncOperationWithProgress<TResult, TProgress>^
yöntemine geçirilen lambda imzasını temel alır.
template<typename _Function>
__declspec(noinline) auto create_async(const _Function& _Func)
-> decltype(ref new details::_AsyncTaskGeneratorThunk<_Function>(_Func));
Parametreler
_Fonksiyon
Tür.
_Func
Windows Çalışma Zamanı zaman uyumsuz yapı oluşturulacak lambda veya işlev nesnesi.
Dönüş Değeri
IAsyncAction^, IAsyncActionWithProgress TProgress<>^, IAsyncOperation<TResult>^ veya IAsyncOperationWithProgress<TResult, TProgress>^ ile temsil edilen zaman uyumsuz bir yapı. Döndürülen arabirim, işleve geçirilen lambda imzasına bağlıdır.
Açıklamalar
Lambda'nın dönüş türü, yapının bir eylem mi yoksa bir işlem mi olduğunu belirler.
Geçersiz değer döndüren lambdalar eylemlerin oluşturulmasına neden olur. Türün TResult
sonucunu döndüren lambdalar, TResult işlemlerinin oluşturulmasına neden olur.
Lambda, kendi içinde aysnchronous çalışmasını kapsülleyen veya zaman uyumsuz çalışmayı temsil eden bir görev zincirinin devamı olan bir de döndürebilir task<TResult>
. Bu durumda, görevler zaman uyumsuz olarak yürütülen görevler olduğundan ve lambda'nın dönüş türü tarafından create_async
döndürülen zaman uyumsuz yapıyı üretmek için eşlenmemiş olduğundan lambda satır içinde yürütülür. Bu, boş görev<> döndüren bir lambdanın eylemlerin oluşturulmasına neden olacağı ve TResult görevini<döndüren bir lambda'nın TResult> işlemlerinin oluşturulmasına neden olacağı anlamına gelir.
Lambda sıfır, bir veya iki bağımsız değişken alabilir. Her ikisi progress_reporter<TProgress>
de kullanılıyorsa geçerli bağımsız değişkenler ve cancellation_token
şeklindedir. Bağımsız değişkenleri olmayan bir lambda, ilerleme raporlama özelliği olmadan zaman uyumsuz bir yapı oluşturulmasına neden olur. progress_reporter TProgress> alan bir lambda, progress_reporter<nesnesinin yöntemi her report
çağrıldığında TProgress türünün ilerleme durumunu bildiren zaman uyumsuz bir yapı döndürmeye neden create_async
olur. cancellation_token alan bir lambda, iptali denetlemek için bu belirteci kullanabilir veya zaman uyumsuz yapı iptalinin bu görevlerin iptaline neden olması için oluşturduğu görevlere geçirebilir.
Lambda veya işlev nesnesinin gövdesi bir sonuç döndürürse (TResult> görevi<değil) lamdba, Çalışma Zamanı'nın örtük olarak oluşturduğu bir görev bağlamında işlem MTA'sı içinde zaman uyumsuz olarak yürütülür. IAsyncInfo::Cancel
yöntemi örtük görevin iptalini neden olur.
Lambda gövdesi bir görev döndürürse, lamba satır içinde yürütülür ve lambda'yı türünde cancellation_token
bir bağımsız değişken alacak şekilde bildirerek, lambda içinde oluşturduğunuz tüm görevlerin iptalini tetikleyebilirsiniz. Bunları oluştururken bu belirteci geçirerek lambda içinde oluşturduğunuz görevlerin iptalini tetikleyebilirsiniz. Zaman uyumsuz işlemi veya üretilen eylemi çağırdığınızda Çalışma Zamanı'nın bir geri çağırma çağırmasına neden olmak için belirtecin üzerindeki yöntemini de kullanabilirsiniz register_callback
IAsyncInfo::Cancel
..
Bu işlev yalnızca Windows Çalışma Zamanı uygulamalarda kullanılabilir.
CreateResourceManager
Eşzamanlılık Çalışma Zamanı'nın Resource Manager'ının tekil örneğini temsil eden bir arabirim döndürür. Resource Manager, birbirleriyle işbirliği yapmak isteyen zamanlayıcılara kaynak atamakla sorumludur.
IResourceManager* __cdecl CreateResourceManager();
Dönüş Değeri
Bir IResourceManager
arabirim.
Açıklamalar
Bu yönteme yapılan birden çok sonraki çağrı, Resource Manager'ın aynı örneğini döndürür. Yöntemine yapılan her çağrı Resource Manager'da bir başvuru sayısını artırır ve zamanlayıcınız Resource Manager ile iletişimini tamamladığında IResourceManager::Release yöntemine yapılan bir çağrıyla eşleştirilmelidir.
İşletim sistemi Eşzamanlılık Çalışma Zamanı tarafından desteklenmiyorsa unsupported_os oluşturulur.
create_task
PPL görev nesnesi oluşturur. create_task
bir görev oluşturucu kullanmış olabileceğiniz her yerde kullanılabilir. Görev oluştururken anahtar sözcüğün kullanılmasına izin verdiğinden auto
, çoğunlukla kolaylık sağlamak için sağlanır.
template<typename T>
__declspec(noinline) auto create_task(T _Param, const task_options& _TaskOptions = task_options())
-> task<typename details::_TaskTypeFromParam<T>::T>;
template<typename _ReturnType>
__declspec( noinline) task<_ReturnType> create_task(const task<_ReturnType>& _Task);
Parametreler
T
Görevin oluşturulacağı parametrenin türü.
_ReturnType
Tür.
_Param
Görevin oluşturulacağı parametre. UWP uygulamanızda görevler kullanıyorsanız bu bir lambda veya işlev nesnesi task_completion_event
, nesne, farklı task
bir nesne veya Windows::Foundation::IAsyncInfo arabirimi olabilir.
_TaskOptions
Görev seçenekleri.
_Görev
Oluşturulacak görev.
Dönüş Değeri
türünde T
, türünden _Param
çıkarılır yeni bir görev.
Açıklamalar
İlk aşırı yükleme, tek bir parametre alan bir görev oluşturucu gibi davranır.
İkinci aşırı yükleme, sağlanan iptal belirtecini yeni oluşturulan görevle ilişkilendirir. Bu aşırı yüklemeyi kullanırsanız, ilk parametre olarak farklı task
bir nesne geçirmenize izin verilmez.
Döndürülen görevin türü, ilk parametreden işleve çıkarılır. task_completion_event<T>
türü veya döndüren T
task<T>
bir , task<T>
veya bir functor ise_Param
, oluşturulan görevin türü olurtask<T>
.
UWP uygulamasında, Windows::Foundation::IAsyncOperation<T>^ veya Windows::Foundation::IAsyncOperationWithProgress<T,P>^ türündeyse _Param
veya bu türlerden birini döndüren bir functor ise, oluşturulan görev türünde task<T>
olur. Windows::Foundation::IAsyncAction^ veya Windows::Foundation::IAsyncActionWithProgress<P>^ türündeyse _Param
veya bu türlerden birini döndüren bir functor ise, oluşturulan görevin türü task<void>
olur.
DisableTracing
Eşzamanlılık Çalışma Zamanı'nda izlemeyi devre dışı bırakır. ETW izlemesi varsayılan olarak kaydı kaldırıldığından bu işlev kullanım dışıdır.
__declspec(deprecated("Concurrency::DisableTracing is a deprecated function.")) _CRTIMP HRESULT __cdecl DisableTracing();
Dönüş Değeri
İzleme doğru şekilde devre dışı bırakıldıysa, S_OK
döndürülür. İzleme daha önce başlatılmadıysa döndürülür E_NOT_STARTED
EnableTracing
Eşzamanlılık Çalışma Zamanı'nda izlemeyi etkinleştirir. ETW izleme artık varsayılan olarak açık olduğundan bu işlev kullanım dışıdır.
__declspec(deprecated("Concurrency::EnableTracing is a deprecated function.")) _CRTIMP HRESULT __cdecl EnableTracing();
Dönüş Değeri
İzleme doğru başlatıldıysa döndürülür S_OK
; aksi takdirde E_NOT_STARTED
döndürülür.
Ücretsiz
Yöntemi tarafından Alloc
önceden ayrılmış bir bellek bloğunu Eşzamanlılık Çalışma Zamanı Önbelleğe Alma Alt Bulucus'a serbest bırakır.
void __cdecl Free(_Pre_maybenull_ _Post_invalid_ void* _PAllocation);
Parametreler
_PAllocation
Daha önce yöntemi tarafından Alloc
ayrılan ve serbestlenecek belleğe bir işaretçi. parametresi _PAllocation
değerine NULL
ayarlanırsa, bu yöntem bunu yoksayar ve hemen döndürür.
Açıklamalar
Uygulamanızdaki hangi senaryoların Önbelleğe Alma Alt Bulucu'nun kullanılmasından yararlanabileceği hakkında daha fazla bilgi için bkz . Görev Zamanlayıcı.
get_ambient_scheduler
inline std::shared_ptr<::Concurrency::scheduler_interface> get_ambient_scheduler();
Dönüş Değeri
GetExecutionContextId
Arabirimi uygulayan IExecutionContext
bir yürütme bağlamı için atanabilen benzersiz bir tanımlayıcı döndürür.
unsigned int __cdecl GetExecutionContextId();
Dönüş Değeri
Yürütme bağlamı için benzersiz tanımlayıcı.
Açıklamalar
Resource Manager tarafından sunulan yöntemlerden herhangi birine parametre olarak bir IExecutionContext
arabirim geçirmeden önce yürütme bağlamınız için bir tanımlayıcı almak için bu yöntemi kullanın.
GetOSVersion
İşletim sistemi sürümünü döndürür.
IResourceManager::OSVersion __cdecl GetOSVersion();
Dönüş Değeri
İşletim sistemini temsil eden numaralandırılmış değer.
Açıklamalar
İşletim sistemi Eşzamanlılık Çalışma Zamanı tarafından desteklenmiyorsa unsupported_os oluşturulur.
GetProcessorCount
Temel alınan sistemdeki donanım iş parçacığı sayısını döndürür.
unsigned int __cdecl GetProcessorCount();
Dönüş Değeri
Donanım iş parçacığı sayısı.
Açıklamalar
İşletim sistemi Eşzamanlılık Çalışma Zamanı tarafından desteklenmiyorsa unsupported_os oluşturulur.
GetProcessorNodeCount
Temel alınan sistemdeki NUMA düğümlerinin veya işlemci paketlerinin sayısını döndürür.
unsigned int __cdecl GetProcessorNodeCount();
Dönüş Değeri
NUMA düğümlerinin veya işlemci paketlerinin sayısı.
Açıklamalar
Sistem işlemci paketlerinden daha fazla NUMA düğümü içeriyorsa, NUMA düğümlerinin sayısı döndürülür, aksi takdirde işlemci paketlerinin sayısı döndürülür.
İşletim sistemi Eşzamanlılık Çalışma Zamanı tarafından desteklenmiyorsa unsupported_os oluşturulur.
GetSchedulerId
Arabirimi uygulayan IScheduler
bir zamanlayıcıya atanabilen benzersiz bir tanımlayıcı döndürür.
unsigned int __cdecl GetSchedulerId();
Dönüş Değeri
Zamanlayıcı için benzersiz tanımlayıcı.
Açıklamalar
Resource Manager tarafından sunulan yöntemlerden herhangi birine parametre olarak bir IScheduler
arabirim geçirmeden önce zamanlayıcınızın tanımlayıcısını almak için bu yöntemi kullanın.
internal_assign_iterators
template<typename T, class _Ax>
template<class _I>
void concurrent_vector<T, _Ax>::internal_assign_iterators(
_I first,
_I last);
Parametreler
T
_Balta
_Ben
birinci
son
interruption_point
İptal için bir kesinti noktası oluşturur. Bu işlevin çağrıldığı bağlamda bir iptal işlemi devam ederse, bu işlem şu anda yürütülen paralel çalışmanın yürütülmesini durduran bir iç özel durum oluşturur. İptal işlemi devam etmiyorsa işlev hiçbir şey yapmaz.
inline void interruption_point();
Açıklamalar
İşlev tarafından interruption_point()
oluşan iç iptal özel durumunu yakalamamalısınız. Özel durum çalışma zamanı tarafından yakalanıp işlenir ve yakalanması programınızın anormal davranmasına neden olabilir.
is_current_task_group_canceling
Geçerli bağlamda satır içi olarak yürütülmekte olan görev grubunun etkin bir iptalin ortasında olup olmadığını (veya kısa süre içinde olacağını) belirten bir gösterge döndürür. Geçerli bağlamda şu anda satır içinde yürütülen bir görev grubu yoksa, false
döndürüleceğini unutmayın.
bool __cdecl is_current_task_group_canceling();
Dönüş Değeri
true
şu anda yürütülmekte olan görev grubu iptal ediyorsa, false
aksi takdirde.
Açıklamalar
Daha fazla bilgi için bkz . İptal.
make_choice
choice
İsteğe bağlı Scheduler
veya iki veya ScheduleGroup
daha fazla giriş kaynağından bir mesajlaşma bloğu oluşturur.
template<typename T1, typename T2, typename... Ts>
choice<std::tuple<T1, T2, Ts...>> make_choice(
Scheduler& _PScheduler,
T1 _Item1,
T2 _Item2,
Ts... _Items);
template<typename T1, typename T2, typename... Ts>
choice<std::tuple<T1, T2, Ts...>> make_choice(
ScheduleGroup& _PScheduleGroup,
T1 _Item1,
T2 _Item2,
Ts... _Items);
template<typename T1, typename T2, typename... Ts>
choice<std::tuple<T1, T2, Ts...>> make_choice(
T1 _Item1,
T2 _Item2,
Ts... _Items);
Parametreler
T1
İlk kaynağın ileti bloğu türü.
T2
İkinci kaynağın ileti bloğu türü.
_PScheduler
Scheduler
İleti bloğu için yayma görevinin choice
zamanlandığı nesne.
_Item1
İlk kaynak.
_Item2
İkinci kaynak.
_Eşya
Ek kaynaklar.
_PScheduleGroup
ScheduleGroup
İleti bloğu için yayma görevinin choice
zamanlandığı nesne. Scheduler
Kullanılan nesne zamanlama grubu tarafından örtülür.
Dönüş Değeri
choice
İki veya daha fazla giriş kaynağı içeren bir ileti bloğu.
make_greedy_join
greedy multitype_join
İsteğe bağlı Scheduler
veya iki veya ScheduleGroup
daha fazla giriş kaynağından bir mesajlaşma bloğu oluşturur.
template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>,greedy> make_greedy_join(
Scheduler& _PScheduler,
T1 _Item1,
T2 _Item2,
Ts... _Items);
template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>, greedy> make_greedy_join(
ScheduleGroup& _PScheduleGroup,
T1 _Item1,
T2 _Item2,
Ts... _Items);
template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>, greedy> make_greedy_join(
T1 _Item1,
T2 _Items,
Ts... _Items);
Parametreler
T1
İlk kaynağın ileti bloğu türü.
T2
İkinci kaynağın ileti bloğu türü.
_PScheduler
Scheduler
İleti bloğu için yayma görevinin multitype_join
zamanlandığı nesne.
_Item1
İlk kaynak.
_Item2
İkinci kaynak.
_Eşya
Ek kaynaklar.
_PScheduleGroup
ScheduleGroup
İleti bloğu için yayma görevinin multitype_join
zamanlandığı nesne. Scheduler
Kullanılan nesne zamanlama grubu tarafından örtülür.
Dönüş Değeri
greedy multitype_join
İki veya daha fazla giriş kaynağı içeren bir ileti bloğu.
make_join
non_greedy multitype_join
İsteğe bağlı Scheduler
veya iki veya ScheduleGroup
daha fazla giriş kaynağından bir mesajlaşma bloğu oluşturur.
template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>>
make_join(
Scheduler& _PScheduler,
T1 _Item1,
T2 _Item2,
Ts... _Items);
template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>> make_join(
ScheduleGroup& _PScheduleGroup,
T1 _Item1,
T2 _Item2,
Ts... _Items);
template<typename T1, typename T2, typename... Ts>
multitype_join<std::tuple<T1, T2, Ts...>> make_join(
T1 _Item1,
T2 _Item2,
Ts... _Items);
Parametreler
T1
İlk kaynağın ileti bloğu türü.
T2
İkinci kaynağın ileti bloğu türü.
_PScheduler
Scheduler
İleti bloğu için yayma görevinin multitype_join
zamanlandığı nesne.
_Item1
İlk kaynak.
_Item2
İkinci kaynak.
_Eşya
Ek kaynaklar.
_PScheduleGroup
ScheduleGroup
İleti bloğu için yayma görevinin multitype_join
zamanlandığı nesne. Scheduler
Kullanılan nesne zamanlama grubu tarafından örtülür.
Dönüş Değeri
non_greedy multitype_join
İki veya daha fazla giriş kaynağı içeren bir ileti bloğu.
make_task
Nesne oluşturmak için bir task_handle
fabrika yöntemi.
template <class _Function>
task_handle<_Function> make_task(const _Function& _Func);
Parametreler
_Fonksiyon
Nesne tarafından temsil edilen çalışmayı yürütmek için çağrılacak işlev nesnesinin task_handle
türü.
_Func
Nesnesi tarafından task_handle
temsil edilen çalışmayı yürütmek için çağrılacak işlev. Bu bir lambda functor, bir işlev işaretçisi veya işlev çağrısı işlecinin imzalı void operator()()
bir sürümünü destekleyen herhangi bir nesne olabilir.
Dönüş Değeri
Bir task_handle
nesnesi.
Açıklamalar
Lambda ifadesine sahip bir task_handle
nesne oluşturmanız gerektiğinde bu işlev yararlıdır, çünkü lambda functor'ın gerçek türünü bilmeden nesneyi oluşturmanıza olanak tanır.
parallel_buffered_sort
Belirtilen aralıktaki öğeleri azalan olmayan bir düzende veya ikili koşul tarafından belirtilen sıralama ölçütüne göre paralel olarak düzenler. Bu işlev, ek alana ihtiyaç duyması O(n)
dışında karşılaştırma tabanlı, kararsız, yerinde sıralamaya benzer std::sort
ve sıralanan öğeler için varsayılan başlatma gerektirir.
template<typename _Random_iterator>
inline void parallel_buffered_sort(
const _Random_iterator& _Begin,
const _Random_iterator& _End);
template<typename _Allocator,
typename _Random_iterator>
inline void parallel_buffered_sort(
const _Random_iterator& _Begin,
const _Random_iterator& _End);
template<typename _Allocator,
typename _Random_iterator>
inline void parallel_buffered_sort(
const _Allocator& _Alloc,
const _Random_iterator& _Begin,
const _Random_iterator& _End);
template<typename _Random_iterator,
typename _Function>
inline void parallel_buffered_sort(
const _Random_iterator& _Begin,
const _Random_iterator& _End,
const _Function& _Func,
const size_t _Chunk_size = 2048);
template<typename _Allocator,
typename _Random_iterator,
typename _Function>
inline void parallel_buffered_sort(
const _Random_iterator& _Begin,
const _Random_iterator& _End,
const _Function& _Func,
const size_t _Chunk_size = 2048);
template<typename _Allocator,
typename _Random_iterator,
typename _Function>
inline void parallel_buffered_sort(
const _Allocator& _Alloc,
const _Random_iterator& _Begin,
const _Random_iterator& _End,
const _Function& _Func,
const size_t _Chunk_size = 2048);
Parametreler
_Random_iterator
Giriş aralığının yineleyici türü.
_Ayırıcı
C++ Standart Kitaplığı uyumlu bellek ayırıcısının türü.
_Fonksiyon
İkili karşılaştırıcının türü.
_Başlamak
Sıralanacak aralıktaki ilk öğenin konumunu ele alan rastgele erişim yineleyicisi.
_Son
Sıralanacak aralıktaki son öğeyi geçen konumu ele alan rastgele erişim yineleyicisi.
_Alloc
C++ Standart Kitaplığı uyumlu bellek ayırıcısının örneği.
_Func
Sıralamadaki ardışık öğeler tarafından karşılanacak karşılaştırma ölçütlerini tanımlayan kullanıcı tanımlı koşul işlev nesnesi. İkili koşul iki bağımsız değişken alır ve tatmin olduğunda ve false
karşılanmadığında döndürürtrue
. Bu karşılaştırıcı işlevi, dizideki öğe çiftlerine katı bir zayıf sıralama uygulamalıdır.
_Chunk_size
Paralel yürütme için ikiye bölünecek bir öbek mimimum boyutu.
Açıklamalar
Tüm aşırı yüklemeler, sıralanacak öğe sayısı ve T
öğe türü olan n
ek alan gerektirirn * sizeof(T)
. Çoğu durumda parallel_buffered_sort parallel_sort performansta bir gelişme gösterir ve kullanılabilir belleğiniz varsa parallel_sort üzerinden kullanmanız gerekir.
Sağlamazsanız, öğesinin işlecini operator<()
sağlaması için öğe türünü gerektiren varsayılan olarak bir ikili karşılaştırıcı std::less
kullanılır.
Ayırıcı türü veya örneği sağlamazsanız, arabelleği ayırmak için C++ Standart Kitaplık bellek ayırıcısı std::allocator<T>
kullanılır.
Algoritma, giriş aralığını iki öbeke böler ve her öbekleri paralel olarak yürütülmesi için iki alt öbek halinde ardışık olarak böler. İsteğe bağlı bağımsız değişken _Chunk_size
, algoritmaya boyut <_Chunk_size
öbeklerini seri olarak işlemesi gerektiğini belirtmek için kullanılabilir.
parallel_for
parallel_for
bir dizi dizin üzerinde yinelenir ve her yinelemede paralel olarak kullanıcı tarafından sağlanan bir işlevi yürütür.
template <typename _Index_type, typename _Function, typename _Partitioner>
void parallel_for(
_Index_type first,
_Index_type last,
_Index_type _Step,
const _Function& _Func,
_Partitioner&& _Part);
template <typename _Index_type, typename _Function>
void parallel_for(
_Index_type first,
_Index_type last,
_Index_type _Step,
const _Function& _Func);
template <typename _Index_type, typename _Function>
void parallel_for(
_Index_type first,
_Index_type last,
const _Function& _Func,
const auto_partitioner& _Part = auto_partitioner());
template <typename _Index_type, typename _Function>
void parallel_for(
_Index_type first,
_Index_type last,
const _Function& _Func,
const static_partitioner& _Part);
template <typename _Index_type, typename _Function>
void parallel_for(
_Index_type first,
_Index_type last,
const _Function& _Func,
const simple_partitioner& _Part);
template <typename _Index_type, typename _Function>
void parallel_for(
_Index_type first,
_Index_type last,
const _Function& _Func,
affinity_partitioner& _Part);
Parametreler
_Index_type
Yineleme için kullanılan dizinin türü.
_Fonksiyon
Her yinelemede yürütülecek işlevin türü.
_Partitioner
Sağlanan aralığı bölümlendirmek için kullanılan bölümleyicinin türü.
birinci
Yinelemeye dahil edilecek ilk dizin.
son
Yinelemeye dahil edilecek son dizini geçen dizin.
_Adım
ile first
last
yinelenirken adım adım atılan değer. Adım pozitif olmalıdır. adım 1'den küçükse invalid_argument oluşturulur.
_Func
Her yinelemede yürütülecek işlev. Bu bir lambda ifadesi, işlev işaretçisi veya işlev çağrısı işlecinin imzalı void operator()(_Index_type)
bir sürümünü destekleyen herhangi bir nesne olabilir.
_Kısım
Bölümleyici nesnesine başvuru. Bağımsız değişken const
auto_partitioner, static_partitioner&
, const
const
simple_partitioner&
&
veya affinity_partitioner&
bir affinity_partitioner nesnesi kullanılıyorsa, algoritmanın gelecekteki döngülerin durumunu yeniden kullanabilmesi için başvurunun sabit olmayan bir l-değer başvurusu olması gerekir.
Açıklamalar
Daha fazla bilgi için bkz . Paralel Algoritmalar.
parallel_for_each
parallel_for_each
bir aralıktaki her öğeye paralel olarak belirtilen bir işlevi uygular. Öğeler üzerinde yinelemenin for_each
paralel olarak gerçekleştirilmesi ve yineleme sırasının belirtilmemiş olması dışında ad alanındaki işleve std
benzer. bağımsız değişkeni_Func
, parametrenin T
yinelenen kapsayıcının öğe türü olduğu formun operator()(T)
işlev çağrısı işlecini desteklemelidir.
template <typename _Iterator, typename _Function>
void parallel_for_each(
_Iterator first,
_Iterator last,
const _Function& _Func);
template <typename _Iterator, typename _Function, typename _Partitioner>
void parallel_for_each(
_Iterator first,
_Iterator last,
const _Function& _Func,
_Partitioner&& _Part);
Parametreler
_Yineleyici
Kapsayıcı üzerinde yinelemek için kullanılan yineleyicinin türü.
_Fonksiyon
Aralıktaki her öğeye uygulanacak işlevin türü.
_Partitioner
birinci
Paralel yinelemeye dahil edilecek ilk öğenin konumunu ele alan bir yineleyici.
son
Paralel yinelemeye dahil edilecek son öğeyi geçen konumu ele alan bir yineleyici.
_Func
Aralıktaki her öğeye uygulanan kullanıcı tanımlı işlev nesnesi.
_Kısım
Bölümleyici nesnesine başvuru. Bağımsız değişken const
auto_partitioner, static_partitioner&
, const
const
simple_partitioner&
&
veya affinity_partitioner&
bir affinity_partitioner nesnesi kullanılıyorsa, algoritmanın gelecekteki döngülerin durumunu yeniden kullanabilmesi için başvurunun sabit olmayan bir l-değer başvurusu olması gerekir.
Açıklamalar
auto_partitioner, açık bir bölümleyici olmadan aşırı yükleme için kullanılır.
Rastgele erişimi desteklemeyen yineleyiciler için yalnızca auto_partitioner desteklenir.
Daha fazla bilgi için bkz . Paralel Algoritmalar.
parallel_invoke
Parametre olarak sağlanan işlev nesnelerini paralel olarak yürütür ve yürütmeyi tamamlayana kadar bloklar. Her işlev nesnesi bir lambda ifadesi, işlev işaretçisi veya imzalı void operator()()
işlev çağrısı işlecini destekleyen herhangi bir nesne olabilir.
template <typename _Function1, typename _Function2>
void parallel_invoke(
const _Function1& _Func1,
const _Function2& _Func2);
template <typename _Function1, typename _Function2, typename _Function3>
void parallel_invoke(
const _Function1& _Func1,
const _Function2& _Func2,
const _Function3& _Func3);
template <typename _Function1,
typename _Function2,
typename _Function3,
typename _Function4>
void parallel_invoke(
const _Function1& _Func1,
const _Function2& _Func2,
const _Function3& _Func3,
const _Function4& _Func4);
template <typename _Function1,
typename _Function2,
typename _Function3,
typename _Function4,
typename _Function5>
void parallel_invoke(
const _Function1& _Func1,
const _Function2& _Func2,
const _Function3& _Func3,
const _Function4& _Func4,
const _Function5& _Func5);
template <typename _Function1,
typename _Function2,
typename _Function3,
typename _Function4,
typename _Function5,
typename _Function6>
void parallel_invoke(
const _Function1& _Func1,
const _Function2& _Func2,
const _Function3& _Func3,
const _Function4& _Func4,
const _Function5& _Func5,
const _Function6& _Func6);
template <typename _Function1,
typename _Function2,
typename _Function3,
typename _Function4,
typename _Function5,
typename _Function6,
typename _Function7>
void parallel_invoke(
const _Function1& _Func1,
const _Function2& _Func2,
const _Function3& _Func3,
const _Function4& _Func4,
const _Function5& _Func5,
const _Function6& _Func6,
const _Function7& _Func7);
template <typename _Function1,
typename _Function2,
typename _Function3,
typename _Function4,
typename _Function5,
typename _Function6,
typename _Function7,
typename _Function8>
void parallel_invoke(
const _Function1& _Func1,
const _Function2& _Func2,
const _Function3& _Func3,
const _Function4& _Func4,
const _Function5& _Func5,
const _Function6& _Func6,
const _Function7& _Func7,
const _Function8& _Func8);
template <typename _Function1,
typename _Function2,
typename _Function3,
typename _Function4,
typename _Function5,
typename _Function6,
typename _Function7,
typename _Function8,
typename _Function9>
void parallel_invoke(
const _Function1& _Func1,
const _Function2& _Func2,
const _Function3& _Func3,
const _Function4& _Func4,
const _Function5& _Func5,
const _Function6& _Func6,
const _Function7& _Func7,
const _Function8& _Func8,
const _Function9& _Func9);
template <typename _Function1,
typename _Function2,
typename _Function3,
typename _Function4,
typename _Function5,
typename _Function6,
typename _Function7,
typename _Function8,
typename _Function9,
typename _Function10>
void parallel_invoke(
const _Function1& _Func1,
const _Function2& _Func2,
const _Function3& _Func3,
const _Function4& _Func4,
const _Function5& _Func5,
const _Function6& _Func6,
const _Function7& _Func7,
const _Function8& _Func8,
const _Function9& _Func9,
const _Function10& _Func10);
Parametreler
_Function1
Paralel olarak yürütülecek ilk işlev nesnesinin türü.
_Function2
Paralel olarak yürütülecek ikinci işlev nesnesinin türü.
_Function3
Paralel olarak yürütülecek üçüncü işlev nesnesinin türü.
_Function4
Paralel olarak yürütülecek dördüncü işlev nesnesinin türü.
_Function5
Paralel olarak yürütülecek beşinci işlev nesnesinin türü.
_Function6
Paralel olarak yürütülecek altıncı işlev nesnesinin türü.
_Function7
Paralel olarak yürütülecek yedinci işlev nesnesinin türü.
_Function8
Paralel olarak yürütülecek sekizinci işlev nesnesinin türü.
_Function9
Paralel olarak yürütülecek dokuzuncu işlev nesnesinin türü.
_Function10
Paralel olarak yürütülecek onuncu işlev nesnesinin türü.
_Func1
Paralel olarak yürütülecek ilk işlev nesnesi.
_Func2
Paralel olarak yürütülecek ikinci işlev nesnesi.
_Func3
Paralel olarak yürütülecek üçüncü işlev nesnesi.
_Func4
Paralel olarak yürütülecek dördüncü işlev nesnesi.
_Func5
Paralel olarak yürütülecek beşinci işlev nesnesi.
_Func6
Paralel olarak yürütülecek altıncı işlev nesnesi.
_Func7
Paralel olarak yürütülecek yedinci işlev nesnesi.
_Func8
Paralel olarak yürütülecek sekizinci işlev nesnesi.
_Func9
Paralel olarak yürütülecek dokuzuncu işlev nesnesi.
_Func10
Paralel olarak yürütülecek onuncu işlev nesnesi.
Açıklamalar
Parametre olarak sağlanan bir veya daha fazla işlev nesnesinin çağırma bağlamında satır içinde yürütülebileceğini unutmayın.
Bu işleve parametre olarak geçirilen işlev nesnelerinden biri veya daha fazlası bir özel durum oluşturursa, çalışma zamanı kendi seçimi için böyle bir özel durum seçer ve çağrısının parallel_invoke
dışına yayılır.
Daha fazla bilgi için bkz . Paralel Algoritmalar.
parallel_radixsort
Bir radix sıralama algoritması kullanarak belirtilen aralıktaki öğeleri azalan olmayan bir düzende düzenler. Bu, öğeleri işaretsiz tamsayı benzeri anahtarlara sıralanabilen bir projeksiyon işlevi gerektiren kararlı bir sıralama işlevidir. Sıralanan öğeler için varsayılan başlatma gereklidir.
template<typename _Random_iterator>
inline void parallel_radixsort(
const _Random_iterator& _Begin,
const _Random_iterator& _End);
template<typename _Allocator, typename _Random_iterator>
inline void parallel_radixsort(
const _Random_iterator& _Begin,
const _Random_iterator& _End);
template<typename _Allocator, typename _Random_iterator>
inline void parallel_radixsort(
const _Allocator& _Alloc,
const _Random_iterator& _Begin,
const _Random_iterator& _End);
template<typename _Random_iterator, typename _Function>
inline void parallel_radixsort(
const _Random_iterator& _Begin,
const _Random_iterator& _End,
const _Function& _Proj_func,
const size_t _Chunk_size = 256* 256);
template<typename _Allocator, typename _Random_iterator,
typename _Function>
inline void parallel_radixsort(
const _Random_iterator& _Begin,
const _Random_iterator& _End,
const _Function& _Proj_func,
const size_t _Chunk_size = 256* 256);
template<typename _Allocator,
typename _Random_iterator,
typename _Function>
inline void parallel_radixsort(
const _Allocator& _Alloc,
const _Random_iterator& _Begin,
const _Random_iterator& _End,
const _Function& _Proj_func,
const size_t _Chunk_size = 256* 256);
Parametreler
_Random_iterator
Giriş aralığının yineleyici türü.
_Ayırıcı
C++ Standart Kitaplığı uyumlu bellek ayırıcısının türü.
_Fonksiyon
Projeksiyon işlevinin türü.
_Başlamak
Sıralanacak aralıktaki ilk öğenin konumunu ele alan rastgele erişim yineleyicisi.
_Son
Sıralanacak aralıktaki son öğeyi geçen konumu ele alan rastgele erişim yineleyicisi.
_Alloc
C++ Standart Kitaplığı uyumlu bellek ayırıcısının örneği.
_Proj_func
Bir öğeyi integral değerine dönüştüren kullanıcı tanımlı projeksiyon işlevi nesnesi.
_Chunk_size
Paralel yürütme için ikiye bölünecek bir öbek mimimum boyutu.
Açıklamalar
Tüm aşırı yüklemeler, sıralanacak öğe sayısı ve T
öğe türü olan n
ek alan gerektirirn * sizeof(T)
. Bir öğe verildiğinde bir anahtar döndürmek için imzalı I _Proj_func(T)
bir projeksiyon funktörü gereklidir; burada T
öğe türüdür ve I
işaretsiz tamsayı benzeri bir türdür.
Projeksiyon işlevi sağlamazsanız, tam sayı türleri için yalnızca öğesini döndüren varsayılan bir projeksiyon işlevi kullanılır. bir yansıtma işlevinin yokluğunda öğe tam sayı türünde değilse işlev derlenemiyor.
Ayırıcı türü veya örneği sağlamazsanız, arabelleği ayırmak için C++ Standart Kitaplık bellek ayırıcısı std::allocator<T>
kullanılır.
Algoritma, giriş aralığını iki öbeke böler ve her öbekleri paralel olarak yürütülmesi için iki alt öbek halinde ardışık olarak böler. İsteğe bağlı bağımsız değişken _Chunk_size
, algoritmaya boyut <_Chunk_size
öbeklerini seri olarak işlemesi gerektiğini belirtmek için kullanılabilir.
parallel_reduce
Ardışık kısmi toplamları hesaplayarak belirtilen aralıktaki tüm öğelerin toplamını hesaplar veya paralel olarak sum dışında belirtilen bir ikili işlem kullanılarak benzer şekilde elde edilen ardışık kısmi sonuçların sonucunu hesaplar. parallel_reduce
, ikili işlemin ilişkilendirilebilir olmasını gerektirmesi ve ilk değer yerine kimlik değeri gerektirmesi dışında, ile benzerdir std::accumulate
.
template<typename _Forward_iterator>
inline typename std::iterator_traits<_Forward_iterator>::value_type parallel_reduce(
_Forward_iterator _Begin,
_Forward_iterator _End,
const typename std::iterator_traits<_Forward_iterator>::value_type& _Identity);
template<typename _Forward_iterator, typename _Sym_reduce_fun>
inline typename std::iterator_traits<_Forward_iterator>::value_type parallel_reduce(
_Forward_iterator _Begin,
_Forward_iterator _End,
const typename std::iterator_traits<_Forward_iterator>::value_type& _Identity,
_Sym_reduce_fun _Sym_fun);
template<typename _Reduce_type,
typename _Forward_iterator,
typename _Range_reduce_fun,
typename _Sym_reduce_fun>
inline _Reduce_type parallel_reduce(
_Forward_iterator _Begin,
_Forward_iterator _End,
const _Reduce_type& _Identity,
const _Range_reduce_fun& _Range_fun,
const _Sym_reduce_fun& _Sym_fun);
Parametreler
_Forward_iterator
Giriş aralığının yineleyici türü.
_Sym_reduce_fun
Simetrik azaltma işlevinin türü. Bu, imzalı _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type)
bir işlev türü olmalıdır ve burada _Reduce_type kimlik türüyle ve azaltmanın sonuç türüyle aynıdır. Üçüncü aşırı yükleme için bu, çıkış türüyle _Range_reduce_fun
tutarlı olmalıdır.
_Reduce_type
Girişin azaltılacağı tür; giriş öğesi türünden farklı olabilir. Dönüş değeri ve kimlik değeri bu türe sahip olur.
_Range_reduce_fun
Aralık azaltma işlevinin türü. Bu, imzası _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type)
olan bir işlev türü olmalıdır _Reduce_type kimlik türüyle ve azaltmanın sonuç türüyle aynıdır.
_Başlamak
Azaltılacak aralıktaki ilk öğeyi ele alan bir giriş yineleyicisi.
_Son
Azaltılacak aralıktaki son öğenin ötesindeki bir konum olan öğeyi ele alan bir giriş yineleyicisi.
_Kimlik
Kimlik değeri _Identity
, azaltmanın sonuç türüyle ve ayrıca value_type
birinci ve ikinci aşırı yüklemeler için yineleyicinin türüyle aynı türdedir. Üçüncü aşırı yükleme için kimlik değerinin azaltmanın sonuç türüyle aynı türde olması gerekir, ancak yineleyicinin türünden farklı value_type
olabilir. Uygun bir değere sahip olmalıdır; aralık azaltma işleci _Range_fun
, tek bir öğe türüne value_type
ve kimlik değerine uygulandığında, değerin türünden value_type
kimlik türüne tür ataması gibi davranır.
_Sym_fun
Azaltmanın ikincisinde kullanılacak simetrik işlev. Daha fazla bilgi için Açıklamalar'a bakın.
_Range_fun
Azaltmanın ilk aşamasında kullanılacak işlev. Daha fazla bilgi için Açıklamalar'a bakın.
Dönüş Değeri
Azaltmanın sonucu.
Açıklamalar
Paralel azaltma gerçekleştirmek için işlev, temel zamanlayıcı için kullanılabilir çalışan sayısına göre aralığı öbeklere böler. Azaltma iki aşamada gerçekleşir, ilk aşama her öbek içinde bir azaltma gerçekleştirir ve ikinci aşama her öbekten alınan kısmi sonuçlar arasında bir azaltma gerçekleştirir.
İlk aşırı yükleme, yineleyicinin value_type
, T
değerinin kimlik değeri türüyle ve azaltma sonuç türüyle aynı olmasını gerektirir. T öğe türü, her öbekteki öğeleri azaltmak için işleci T T::operator + (T)
sağlamalıdır. İkinci aşamada da aynı işleç kullanılır.
İkinci aşırı yükleme, yineleyicinin value_type
kimlik değeri türüyle ve azaltma sonuç türüyle aynı olmasını da gerektirir. Sağlanan ikili işleç _Sym_fun
, her iki azaltma aşamasında da kullanılır ve kimlik değeri ilk aşama için ilk değer olarak kullanılır.
Üçüncü aşırı yükleme için kimlik değeri türünün azaltma sonuç türüyle aynı olması gerekir, ancak yineleyicinin value_type
türü her ikisinden de farklı olabilir. Aralık azaltma işlevi _Range_fun
ilk aşamada kimlik değeri ilk değer olarak kullanılır ve ikili işlevi _Sym_reduce_fun
ikinci aşamadaki alt sonuçlara uygulanır.
parallel_sort
Belirtilen aralıktaki öğeleri azalan olmayan bir düzende veya ikili koşul tarafından belirtilen sıralama ölçütüne göre paralel olarak düzenler. Bu std::sort
işlev, karşılaştırma tabanlı, kararsız ve yerinde sıralama özelliğine benzer.
template<typename _Random_iterator>
inline void parallel_sort(
const _Random_iterator& _Begin,
const _Random_iterator& _End);
template<typename _Random_iterator,typename _Function>
inline void parallel_sort(
const _Random_iterator& _Begin,
const _Random_iterator& _End,
const _Function& _Func,
const size_t _Chunk_size = 2048);
Parametreler
_Random_iterator
Giriş aralığının yineleyici türü.
_Fonksiyon
İkili karşılaştırma funktörünün türü.
_Başlamak
Sıralanacak aralıktaki ilk öğenin konumunu ele alan rastgele erişim yineleyicisi.
_Son
Sıralanacak aralıktaki son öğeyi geçen konumu ele alan rastgele erişim yineleyicisi.
_Func
Sıralamadaki ardışık öğeler tarafından karşılanacak karşılaştırma ölçütlerini tanımlayan kullanıcı tanımlı koşul işlev nesnesi. İkili koşul iki bağımsız değişken alır ve tatmin olduğunda ve false
karşılanmadığında döndürürtrue
. Bu karşılaştırıcı işlevi, dizideki öğe çiftlerine katı bir zayıf sıralama uygulamalıdır.
_Chunk_size
Paralel yürütme için ikiye bölünecek bir öbek en küçük boyutu.
Açıklamalar
İlk aşırı yükleme ikili karşılaştırıcısını std::less
kullanır.
İkinci aşırı yüklenen, giriş aralığındaki öğelerin türü olan T
imzaya bool _Func(T, T)
sahip olması gereken sağlanan ikili karşılaştırıcıyı kullanır.
Algoritma, giriş aralığını iki öbeke böler ve her öbekleri paralel olarak yürütülmesi için iki alt öbek halinde ardışık olarak böler. İsteğe bağlı bağımsız değişken _Chunk_size
, algoritmaya boyut <_Chunk_size
öbeklerini seri olarak işlemesi gerektiğini belirtmek için kullanılabilir.
parallel_transform
Belirtilen işlev nesnesini bir kaynak aralıktaki her öğeye veya iki kaynak aralıktaki bir öğe çiftine uygular ve işlev nesnesinin dönüş değerlerini paralel olarak bir hedef aralığa kopyalar. Bu işlev, ile eşanlamlı olarak eşdeğerdir std::transform
.
template <typename _Input_iterator1,
typename _Output_iterator,
typename _Unary_operator>
_Output_iterator parallel_transform(
_Input_iterator1 first1,
_Input_iterator1 last1,
_Output_iterator _Result,
const _Unary_operator& _Unary_op,
const auto_partitioner& _Part = auto_partitioner());
template <typename _Input_iterator1,
typename _Output_iterator,
typename _Unary_operator>
_Output_iterator parallel_transform(
_Input_iterator1 first1,
_Input_iterator1 last1,
_Output_iterator _Result,
const _Unary_operator& _Unary_op,
const static_partitioner& _Part);
template <typename _Input_iterator1,
typename _Output_iterator,
typename _Unary_operator>
_Output_iterator parallel_transform(
_Input_iterator1 first1,
_Input_iterator1 last1,
_Output_iterator _Result,
const _Unary_operator& _Unary_op,
const simple_partitioner& _Part);
template <typename _Input_iterator1,
typename _Output_iterator,
typename _Unary_operator>
_Output_iterator parallel_transform(
_Input_iterator1 first1,
_Input_iterator1 last1,
_Output_iterator _Result,
const _Unary_operator& _Unary_op,
affinity_partitioner& _Part);
template <typename _Input_iterator1,
typename _Input_iterator2,
typename _Output_iterator,
typename _Binary_operator,
typename _Partitioner>
_Output_iterator parallel_transform(
_Input_iterator1 first1,
_Input_iterator1 last1,
_Input_iterator2
first2,
_Output_iterator _Result,
const _Binary_operator& _Binary_op,
_Partitioner&& _Part);
template <typename _Input_iterator1,
typename _Input_iterator2,
typename _Output_iterator,
typename _Binary_operator>
_Output_iterator parallel_transform(
_Input_iterator1 first1,
_Input_iterator1 last1,
_Input_iterator2
first2,
_Output_iterator _Result,
const _Binary_operator& _Binary_op);
Parametreler
_Input_iterator1
İlk veya yalnızca giriş yineleyicisinin türü.
_Output_iterator
Çıkış yineleyicisinin türü.
_Unary_operator
Giriş aralığındaki her öğede yürütülecek birli functor türü.
_Input_iterator2
İkinci giriş yineleyicisinin türü.
_Binary_operator
İki kaynak aralığındaki öğelerde çift yönlü olarak yürütülen ikili funktör türü.
_Partitioner
ilk1
Çalıştırılacak ilk veya tek kaynak aralığındaki ilk öğenin konumunu ele alan bir giriş yineleyicisi.
son1
Çalıştırılacak ilk veya tek kaynak aralığındaki son öğeyi geçen konumu ele alan bir giriş yineleyicisi.
_Sonuç
Hedef aralıktaki ilk öğenin konumunu ele alan bir çıkış yineleyicisi.
_Unary_op
Kaynak aralıktaki her öğeye uygulanan kullanıcı tanımlı bir tekli işlev nesnesi.
_Kısım
Bölümleyici nesnesine başvuru. Bağımsız değişken const
auto_partitioner, static_partitioner&
, const
const
simple_partitioner&
&
veya affinity_partitioner&
bir affinity_partitioner nesnesi kullanılıyorsa, algoritmanın gelecekteki döngülerin durumunu yeniden kullanabilmesi için başvurunun sabit olmayan bir l-değer başvurusu olması gerekir.
ilk2
çalıştırılacak ikinci kaynak aralığındaki ilk öğenin konumunu ele alan bir giriş yineleyicisi.
_Binary_op
İki kaynak aralığına çift yönlü, ileriye doğru uygulanan kullanıcı tanımlı ikili işlev nesnesi.
Dönüş Değeri
İşlev nesnesi tarafından dönüştürülen çıkış öğelerini alan hedef aralıktaki son öğeyi geçen konumu ele alan bir çıkış yineleyicisi.
Açıklamalar
auto_partitioner, açık bir bölümleyici bağımsız değişkeni olmadan aşırı yüklemeler için kullanılır.
Rastgele erişimi desteklemeyen yineleyiciler için yalnızca auto_partitioner desteklenir.
Bağımsız değişkenini _Unary_op
alan aşırı yüklemeler, giriş aralığındaki her öğeye birli functor uygulayarak giriş aralığını çıkış aralığına dönüştürür. _Unary_op
, yinelenen aralığın değer türü olan T
imzalı operator()(T)
işlev çağrısı işlecini desteklemelidir.
Bağımsız değişkenini _Binary_op
alan aşırı yüklemeler, ikili funktörünü ilk giriş aralığından bir öğeye ve ikinci giriş aralığından bir öğeye uygulayarak iki giriş aralığını çıkış aralığına dönüştürür. _Binary_op
, iki giriş yineleyicisinin değer türleri olan T
U
imzalı operator()(T, U)
işlev çağrısı işlecini desteklemelidir.
Daha fazla bilgi için bkz . Paralel Algoritmalar.
almak
Bağlamın tam olarak bir kaynaktan gelen verileri beklemesini ve kabul edilen değerleri filtrelemesini sağlayan genel bir alma uygulaması.
template <class T>
T receive(
_Inout_ ISource<T>* _Src,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
template <class T>
T receive(
_Inout_ ISource<T>* _Src,
typename ITarget<T>::filter_method const& _Filter_proc,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
template <class T>
T receive(
ISource<T>& _Src,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
template <class T>
T receive(
ISource<T>& _Src,
typename ITarget<T>::filter_method const& _Filter_proc,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
Parametreler
T
Yük türü.
_Src
Verilerin beklendiği kaynağa ilişkin bir işaretçi veya başvuru.
_Zaman aşımı
Milisaniye cinsinden veriler için yöntemin olması gereken en uzun süre.
_Filter_proc
İletilerin kabul edilip edilmeyeceğini belirleyen bir filtre işlevi.
Dönüş Değeri
Kaynaktan, yük türündeki bir değer.
Açıklamalar
parametresi _Timeout
sabiti COOPERATIVE_TIMEOUT_INFINITE
dışında bir değere sahipse, ileti alınmadan önce belirtilen süre dolarsa özel durum operation_timed_out oluşturulur. Sıfır uzunluklu bir zaman aşımı istiyorsanız, daha verimli olduğundan ve zaman aşımlarında özel durumlar oluşturmadığından zaman aşımı 0
(sıfır) ile çağırmak receive
yerine try_receive işlevini kullanmanız gerekir.
Daha fazla bilgi için bkz . İleti Geçirme İşlevleri.
run_with_cancellation_token
Bir işlev nesnesini verilen iptal belirteci bağlamında hemen ve zaman uyumlu olarak yürütür.
template<typename _Function>
void run_with_cancellation_token(
const _Function& _Func,
cancellation_token _Ct);
Parametreler
_Fonksiyon
Çağrılacak işlev nesnesinin türü.
_Func
Yürütülecek işlev nesnesi. Bu nesne void(void) imzasıyla işlev çağrısı işlecini desteklemelidir.
_Ct
İşlev nesnesinin örtük iptalini denetleyen iptal belirteci. İşlevin, üst görev grubundan örtük iptal işleminin iptal edilme olasılığı olmadan yürütülmesini istiyorsanız kullanın cancellation_token::none()
.
Açıklamalar
iptal edildiğinde cancellation_token
işlev nesnesindeki tüm kesinti noktaları tetiklenir. Üst belirtecin farklı bir belirteci varsa veya belirteci _Ct
yoksa, açık belirteç bunu _Func
üst iptalden yalıtır.
Gönder
Hedef iletiyi kabul edene veya reddedene kadar bekleyen zaman uyumlu gönderme işlemi.
template <class T>
bool send(_Inout_ ITarget<T>* _Trg, const T& _Data);
template <class T>
bool send(ITarget<T>& _Trg, const T& _Data);
Parametreler
T
Yük türü.
_Trg
Verilerin gönderildiği hedefe ilişkin bir işaretçi veya başvuru.
_Veri
Gönderilecek verilere başvuru.
Dönüş Değeri
true
ileti kabul edildiyse, false
aksi takdirde.
Açıklamalar
Daha fazla bilgi için bkz . İleti Geçirme İşlevleri.
set_ambient_scheduler
inline void set_ambient_scheduler(std::shared_ptr<::Concurrency::scheduler_interface> _Scheduler);
Parametreler
_Zamanlayıcı
Ayarlanacağı ortam zamanlayıcısı.
set_task_execution_resources
Eşzamanlılık Çalışma Zamanı iç çalışan iş parçacıkları tarafından kullanılan yürütme kaynaklarını belirtilen benşim kümesiyle kısıtlar.
Bu yöntemi yalnızca Resource Manager oluşturulmadan önce veya iki Resource Manager yaşam süresi arasında çağırmak geçerlidir. Resource Manager çağrılırken mevcut olmadığı sürece birden çok kez çağrılabilir. Benzite sınırı ayarlandıktan sonra, yönteme bir sonraki geçerli çağrıya set_task_execution_resources
kadar etkin kalır.
Sağlanan benzite maskesinin işlem benzdirme maskesinin bir alt kümesi olması gerekmez. Gerekirse işlem benzitesi güncelleştirilir.
void __cdecl set_task_execution_resources(
DWORD_PTR _ProcessAffinityMask);
void __cdecl set_task_execution_resources(
unsigned short count,
PGROUP_AFFINITY _PGroupAffinity);
Parametreler
_ProcessAffinityMask
Eşzamanlılık Çalışma Zamanı çalışan iş parçacıklarının kısıtlanması gereken benşim maskesi. Bu yöntemi yalnızca Eşzamanlılık Çalışma Zamanı'nı geçerli işlemci grubunun bir alt kümesiyle sınırlamak istiyorsanız 64'ten fazla donanım iş parçacığına sahip bir sistemde kullanın. Genel olarak, 64'ten fazla donanım iş parçacığına sahip makinelerde bennizimi kısıtlamak için yöntemin bir grup beniniteleri dizisini parametre olarak kabul eden sürümünü kullanmanız gerekir.
count
parametresi _PGroupAffinity
tarafından belirtilen dizideki girdilerin GROUP_AFFINITY
sayısı.
_PGroupAffinity
Girdi dizisi GROUP_AFFINITY
.
Açıklamalar
Bir Resource Manager çağrıldığında mevcutsa yöntemi bir invalid_operation özel durumu ve belirtilen benşim boş bir kaynak kümesiyle sonuçlanırsa bir invalid_argument özel durumu oluşturur.
Parametre olarak grup benzimleri dizisini alan yöntemin sürümü yalnızca Windows 7 veya üzeri sürüme sahip işletim sistemlerinde kullanılmalıdır. Aksi takdirde, bir invalid_operation özel durumu oluşturulur.
Bu yöntem çağrıldıktan sonra işlem benzini program aracılığıyla değiştirmek, Resource Manager'ın kısıtlandığı benşimi yeniden değerlendirmesine neden olmaz. Bu nedenle, bu yöntemi çağırmadan önce işlem benziniminde tüm değişiklikler yapılmalıdır.
swap
İki concurrent_vector
nesnenin öğelerini değiştirir.
template<typename T, class _Ax>
inline void swap(
concurrent_vector<T, _Ax>& _A,
concurrent_vector<T, _Ax>& _B);
Parametreler
T
Eşzamanlı vektörlerde depolanan öğelerin veri türü.
_Balta
Eşzamanlı vektörlerin ayırıcı türü.
_A
Öğeleri eşzamanlı vektör ile değiştirilecek eşzamanlı vektör _B
.
_B
Değiştirilecek öğeleri sağlayan eşzamanlı vektör veya öğeleri eşzamanlı vektör ile değiştirilecek vektör _A
.
Açıklamalar
Şablon işlevi, üye işlevini _A
yürütmek için kapsayıcı sınıfında concurrent_vector
özelleştirilmiş bir algoritmadır. concurrent_vector::swap( _B
). Bunlar, derleyici tarafından işlev şablonlarının kısmi sırasının örnekleridir. Şablon işlevleri, şablonun işlev çağrısıyla eşleşmesi benzersiz olmayacak şekilde aşırı yüklendiğinde, derleyici şablon işlevinin en özel sürümünü seçer. Algoritma sınıfında şablon işlevinin template <class T> void swap(T&, T&)
genel sürümü atamayla çalışır ve yavaş bir işlemdir. Kapsayıcı sınıfının iç gösterimiyle çalışaabildiği için her kapsayıcıdaki özel sürüm çok daha hızlıdır.
Bu yöntem eşzamanlılık açısından güvenli değildir. Bu yöntemi çağırdığınızda eş zamanlı vektörlerden herhangi birinde başka hiçbir iş parçacığının işlem gerçekleştirmediğinden emin olmanız gerekir.
task_from_exception
template<typename _TaskType, typename _ExType>
task<_TaskType> task_from_exception(
_ExType _Exception,
const task_options& _TaskOptions = task_options());
Parametreler
_TaskType
_ExType
_İstisna
_TaskOptions
Dönüş Değeri
task_from_result
template<typename T>
task<T> task_from_result(
T _Param,
const task_options& _TaskOptions = task_options());
inline task<bool> task_from_result(ool _Param);
inline task<void> task_from_result(
const task_options& _TaskOptions = task_options());
Parametreler
T
_Param
_TaskOptions
Dönüş Değeri
Trace_agents_register_name
Verilen adı ETW izlemesindeki ileti bloğu veya aracıyla ilişkilendirir.
template <class T>
void Trace_agents_register_name(
_Inout_ T* _PObject,
_In_z_ const wchar_t* _Name);
Parametreler
T
Nesnenin türü. Bu genellikle bir ileti bloğu veya aracıdır.
_PObject
İzlemede adı geçen ileti bloğuna veya aracıya bir işaretçi.
_Ad
Verilen nesnenin adı.
try_receive
Bağlamın tam olarak bir kaynaktan veri aramasına ve kabul edilen değerleri filtrelemesine olanak sağlayan genel bir deneme alma uygulaması. Veriler hazır değilse yöntemi döndürür false
.
template <class T>
bool try_receive(_Inout_ ISource<T>* _Src, T& _value);
template <class T>
bool try_receive(
_Inout_ ISource<T>* _Src,
T& _value,
typename ITarget<T>::filter_method const& _Filter_proc);
template <class T>
bool try_receive(ISource<T>& _Src, T& _value);
template <class T>
bool try_receive(
ISource<T>& _Src,
T& _value,
typename ITarget<T>::filter_method const& _Filter_proc);
Parametreler
T
Yük türü
_Src
Verilerin beklendiği kaynağa ilişkin bir işaretçi veya başvuru.
_değer
Sonucun yerleştirileceği konuma başvuru.
_Filter_proc
İletilerin kabul edilip edilmeyeceğini belirleyen bir filtre işlevi.
Dönüş Değeri
bir bool
yükün içine _value
yerleştirilip yerleştirilmediğini gösteren bir değer.
Açıklamalar
Daha fazla bilgi için bkz . İleti Geçirme İşlevleri.
wait
Geçerli bağlamı belirtilen süre boyunca duraklatır.
void __cdecl wait(unsigned int _Milliseconds);
Parametreler
_Milisaniye
Geçerli bağlamın duraklatılması gereken milisaniye sayısı. _Milliseconds
parametresi değerine 0
ayarlanırsa, devam etmeden önce geçerli bağlam diğer çalıştırılabilir bağlamlara yürütme vermelidir.
Açıklamalar
Bu yöntem Eşzamanlılık Çalışma Zamanı zamanlayıcı bağlamında çağrılırsa, zamanlayıcı temel alınan kaynakta çalıştırılacak farklı bir bağlam bulur. Zamanlayıcı doğası gereği işbirliğine bağlı olduğundan, bu bağlam belirtilen milisaniye sayısından sonra tam olarak sürdürülemez. Zamanlayıcı, zamanlayıcıya işbirliğiyle verim vermeyen diğer görevleri yürütmekle meşgulse, bekleme süresi belirsiz olabilir.
when_all
Bağımsız değişken olarak sağlanan tüm görevler başarıyla tamamlandığında başarıyla tamamlanacak bir görev oluşturur.
template <typename _Iterator>
auto when_all(
_Iterator _Begin,
_Iterator _End,
const task_options& _TaskOptions = task_options()) ->
decltype (details::_WhenAllImpl<typename std::iterator_traits<_Iterator>::value_type::result_type,
_Iterator>::_Perform(_TaskOptions, _Begin, _End));
Parametreler
_Yineleyici
Giriş yineleyicisinin türü.
_Başlamak
Sonuçta elde edilen görevde birleştirilecek öğe aralığındaki ilk öğenin konumu.
_Son
İlk öğenin, sonuçta elde edilen görevde birleştirilecek öğe aralığının ötesindeki konumu.
_TaskOptions
task_options
nesnesi.
Dönüş Değeri
Tüm giriş görevleri başarıyla tamamlandığında başarıyla tamamlanan bir görev. Giriş görevleri türündeyse T
, bu işlevin çıkışı bir task<std::vector<T>>
olacaktır. Giriş görevleri türündeyse void
, çıkış görevi de olur task<void>
.
Açıklamalar
when_all
, sonucu olarak bir oluşturan engelleyici olmayan bir task
işlevdir. Görev::wait'den farklı olarak, ASTA (Uygulama STA) iş parçacığındaki bir UWP uygulamasında bu işlevi çağırmak güvenlidir.
Görevlerden biri iptal edilirse veya bir özel durum oluşturursa, döndürülen görev iptal edildi durumunda erken tamamlanır ve görev::get veya task::wait
bu göreve çağrı yaparsanız özel durum oluşursa oluşturulur.
Daha fazla bilgi için bkz . Görev Paralelliği.
when_any
Bağımsız değişken olarak sağlanan görevlerden herhangi biri başarıyla tamamlandığında başarıyla tamamlanacak bir görev oluşturur.
template<typename _Iterator>
auto when_any(
_Iterator _Begin,
_Iterator _End,
const task_options& _TaskOptions = task_options())
-> decltype (
details::_WhenAnyImpl<
typename std::iterator_traits<_Iterator>::value_type::result_type,
_Iterator>::_Perform(_TaskOptions, _Begin, _End));
template<typename _Iterator>
auto when_any(
_Iterator _Begin,
_Iterator _End,
cancellation_token _CancellationToken)
-> decltype (
details::_WhenAnyImpl<
typename std::iterator_traits<_Iterator>::value_type::result_type,
_Iterator>::_Perform(_CancellationToken._GetImplValue(), _Begin, _End));
Parametreler
_Yineleyici
Giriş yineleyicisinin türü.
_Başlamak
Sonuçta elde edilen görevde birleştirilecek öğe aralığındaki ilk öğenin konumu.
_Son
İlk öğenin, sonuçta elde edilen görevde birleştirilecek öğe aralığının ötesindeki konumu.
_TaskOptions
_CancellationToken
Döndürülen görevin iptalini denetleyen iptal belirteci. İptal belirteci sağlamazsanız, sonuçta elde edilen görev, tamamlanmasına neden olan görevin iptal belirtecini alır.
Dönüş Değeri
Giriş görevlerinden herhangi biri başarıyla tamamlandığında başarıyla tamamlanan bir görev. Giriş görevleri türündeyse T
, bu işlevin çıkışı, çiftin ilk öğesinin tamamlayan görevin sonucu olduğu, ikinci öğenin ise tamamlanan görevin dizini olduğu bir task<std::pair<T, size_t>>>
olur. Giriş görevleri türündeyse void
çıkış bir task<size_t>
ise, sonuç tamamlayan görevin dizinidir.
Açıklamalar
when_any
, sonucu olarak bir oluşturan engelleyici olmayan bir task
işlevdir. Görev::wait'den farklı olarak, ASTA (Uygulama STA) iş parçacığındaki bir UWP uygulamasında bu işlevi çağırmak güvenlidir.
Daha fazla bilgi için bkz . Görev Paralelliği.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin