Aracılığıyla paylaş


IVirtualProcessorRoot Yapısı

üzerinde bir iş parçacığı ara sunucusunun yürütebileceği bir donanım iş parçacığı için soyutlama.

Sözdizimi

struct IVirtualProcessorRoot : public IExecutionResource;

Üyeler

Genel Yöntemler

Ad Tanım
IVirtualProcessorRoot::Activate Yürütme bağlam arabirimiyle ilişkilendirilmiş iş parçacığı ara sunucusunun pContext bu sanal işlemci kökünde yürütülmeye başlamasına neden olur.
IVirtualProcessorRoot::D eactivate Şu anda bu sanal işlemci kökünde yürütülen iş parçacığı ara sunucusunun yürütme bağlamını göndermeyi durdurmasına neden olur. İş parçacığı ara sunucusu, yöntemine yapılan bir çağrıda yürütülmeye Activate devam eder.
IVirtualProcessorRoot::EnsureAllTasksVisible Tek tek işlemcilerin bellek hiyerarşisinde depolanan verilerin sistemdeki tüm işlemciler tarafından görünür hale gelmesine neden olur. Yöntem döndürülmeden önce tüm işlemcilerde tam bellek çitinin yürütülmesini sağlar.
IVirtualProcessorRoot::GetId Sanal işlemci kökü için benzersiz bir tanımlayıcı döndürür.

Açıklamalar

Her sanal işlemci kökünde ilişkili bir yürütme kaynağı vardır. Arabirim, IVirtualProcessorRoot IExecutionResource arabiriminden devralınır. Birden çok sanal işlemci kökü aynı temel alınan donanım iş parçacığına karşılık gelebilir.

Resource Manager, kaynak isteklerine yanıt olarak zamanlayıcılara sanal işlemci kökleri verir. Zamanlayıcı, bir yürütme bağlamı ile etkinleştirerek iş gerçekleştirmek için bir sanal işlemci kökü kullanabilir.

Devralma Hiyerarşisi

IExecutionResource

IVirtualProcessorRoot

Gereksinimler

Üst bilgi: concrtrm.h

Ad alanı: eşzamanlılık

IVirtualProcessorRoot::Activate Yöntemi

Yürütme bağlam arabirimiyle ilişkilendirilmiş iş parçacığı ara sunucusunun pContext bu sanal işlemci kökünde yürütülmeye başlamasına neden olur.

virtual void Activate(_Inout_ IExecutionContext* pContext) = 0;

Parametreler

Pcontext
Bu sanal işlemci kökünde dağıtılacak yürütme bağlamı arabirimi.

Açıklamalar

Yürütme bağlam arabirimiyle ilişkilendirilmemişse Resource Manager bir iş parçacığı ara sunucusu sağlar pContext

Activate yöntemi, Resource Manager tarafından döndürülen yeni bir sanal işlemci kökünde çalışmayı yürütmeye başlamak veya iş parçacığı ara sunucusunu devre dışı bırakılmış veya devre dışı bırakmak üzere olan bir sanal işlemci kökünde sürdürmek için kullanılabilir. Devre dışı bırakma hakkında daha fazla bilgi için bkz . IVirtualProcessorRoot::D eactivate . Devre dışı bırakılmış bir sanal işlemci kökünü devam ettirirken, parametresi pContext sanal işlemci kökünü devre dışı bırakmak için kullanılan parametreyle aynı olmalıdır.

Sanal işlemci kökü ilk kez etkinleştirildikten sonra, sonraki çağrı DeactivateActivate çiftleri birbiriyle yarışabilir. Bu, Resource Manager'ın amaçlandığı çağrıyı almadan önce çağrısı Activate alması Deactivate kabul edilebilir olduğu anlamına gelir.

Bir sanal işlemci kökünü etkinleştirdiğinizde, Resource Manager'a bu sanal işlemci kökünü şu anda işle meşgul olduğunu bildirirsiniz. Zamanlayıcınız bu kökte yürütülecek herhangi bir çalışma bulamazsa, Resource Manager'a sanal işlemci kökü boşta olduğunu bildiren yöntemi çağırması Deactivate beklenir. Resource Manager, sistemin yükünü dengelemek için bu verileri kullanır.

invalid_argument , bağımsız değişkeninin pContext değeri NULLvarsa oluşturulur.

invalid_operation , bağımsız değişkeni pContext bu sanal işlemci kökü tarafından en son dağıtılan yürütme bağlamını temsil etmiyorsa oluşturulur.

Sanal işlemci kökünü etkinleştirme eylemi, temel alınan donanım iş parçacığının abonelik düzeyini bir artırır. Abonelik düzeyleri hakkında daha fazla bilgi için bkz . IExecutionResource::CurrentSubscriptionLevel.

IVirtualProcessorRoot::D eactivate Yöntemi

Şu anda bu sanal işlemci kökünde yürütülen iş parçacığı ara sunucusunun yürütme bağlamını göndermeyi durdurmasına neden olur. İş parçacığı ara sunucusu, yöntemine yapılan bir çağrıda yürütülmeye Activate devam eder.

virtual bool Deactivate(_Inout_ IExecutionContext* pContext) = 0;

Parametreler

Pcontext
Şu anda bu kök tarafından dağıtılmakta olan bağlam.

İade Değeri

Boole değeri. değeri true , yöntemine yapılan bir çağrıya yanıt olarak yönteminden Deactivate döndürülen iş parçacığı ara sunucusunun olduğunu Activate gösterir. değeri false , Resource Manager'daki bir bildirim olayına yanıt olarak yönteminden döndürülen iş parçacığı proxy'sinin olduğunu gösterir. Kullanıcı modu zamanlanabilir (UMS) iş parçacığı zamanlayıcıda bu, öğelerin zamanlayıcının tamamlanma listesinde göründüğünü ve zamanlayıcının bunları işlemek için gerekli olduğunu gösterir.

Açıklamalar

Zamanlayıcınızda herhangi bir çalışma bulamadıktan sonra sanal işlemci kökünü yürütmeyi geçici olarak durdurmak için bu yöntemi kullanın. yöntemine Deactivate yapılan bir çağrı, sanal işlemci kökünün en son etkinleştirildiği yürütme bağlamının yönteminden Dispatch kaynaklanmalıdır. Başka bir deyişle, yöntemini çağıran Deactivate iş parçacığı ara sunucusu şu anda sanal işlemci kökünde yürütülmekte olan sunucu olmalıdır. Yöntemini yürütmediğiniz bir sanal işlemci kökünde çağırmak tanımsız davranışa neden olabilir.

Devre dışı bırakılmış bir sanal işlemci kökü, yöntemine Activate geçirilen aynı bağımsız değişkenle yöntemine Deactivate yapılan bir çağrıyla uyandırılabilir. Zamanlayıcı, ve Deactivate yöntemlerine yapılan çağrıların eşlendiğinden Activate emin olmakla sorumludur, ancak bunların belirli bir sırada alınması gerekmez. Resource Manager, amaçlandığı yönteme Activate bir çağrı almadan önce yöntemine Deactivate çağrı almayı işleyebilir.

Sanal işlemci kök uyanıyorsa ve yönteminden Deactivate döndürülen değer değeri falseise, zamanlayıcı yöntemi aracılığıyla IUMSCompletionList::GetUnblockNotifications UMS tamamlanma listesini sorgulamalı, bu bilgiler üzerinde işlem yapmalı ve ardından yöntemi yeniden çağırmalıdır Deactivate . Yöntemi değerini truedöndürdüğü için bu süreye Deactivate kadar bu yinelenmelidir.

invalid_argument , bağımsız değişken pContext null değerine sahipse oluşturulur.

invalid_operation sanal işlemci kökü hiç etkinleştirilmediyse veya bağımsız değişken pContext bu sanal işlemci kökü tarafından en son dağıtılan yürütme bağlamını temsil etmiyorsa oluşturulur.

Sanal işlemci kökünü devre dışı bırakma eylemi, temel alınan donanım iş parçacığının abonelik düzeyini bir azaltır. Abonelik düzeyleri hakkında daha fazla bilgi için bkz . IExecutionResource::CurrentSubscriptionLevel.

IVirtualProcessorRoot::EnsureAllTasksVisible Yöntemi

Tek tek işlemcilerin bellek hiyerarşisinde depolanan verilerin sistemdeki tüm işlemciler tarafından görünür hale gelmesine neden olur. Yöntem döndürülmeden önce tüm işlemcilerde tam bellek çitinin yürütülmesini sağlar.

virtual void EnsureAllTasksVisible(_Inout_ IExecutionContext* pContext) = 0;

Parametreler

Pcontext
Şu anda bu sanal işlemci kökü tarafından dağıtılmakta olan bağlam.

Açıklamalar

Bir sanal işlemci kökünün devre dışı bırakılmasını zamanlayıcıya yeni iş ekleyerek eşitlemek istediğinizde bu yöntemi yararlı bulabilirsiniz. Performans nedenleriyle, bir bellek engeli yürütmeden zamanlayıcınıza iş öğeleri eklemeye karar verebilirsiniz. Bu, bir işlemcide yürütülen bir iş parçacığı tarafından eklenen iş öğelerinin diğer tüm işlemciler tarafından hemen görülemediğini gösterir. Bu yöntemi yöntemiyle Deactivate birlikte kullanarak, zamanlayıcınızın iş öğeleri zamanlayıcınızın koleksiyonlarında mevcutken tüm sanal işlemci köklerini devre dışı bırakmadığından emin olabilirsiniz.

yöntemine EnsureAllTasksVisibleThe yapılan bir çağrı, sanal işlemci kökünün en son etkinleştirildiği yürütme bağlamının yönteminden Dispatch kaynaklanmalıdır. Başka bir deyişle, yöntemini çağıran EnsureAllTasksVisible iş parçacığı ara sunucusu şu anda sanal işlemci kökünde yürütülmekte olan sunucu olmalıdır. Yöntemini yürütmediğiniz bir sanal işlemci kökünde çağırmak tanımsız davranışa neden olabilir.

invalid_argument , bağımsız değişkeninin pContext değeri NULLvarsa oluşturulur.

invalid_operation sanal işlemci kökü hiç etkinleştirilmediyse veya bağımsız değişken pContext bu sanal işlemci kökü tarafından en son dağıtılan yürütme bağlamını temsil etmiyorsa oluşturulur.

IVirtualProcessorRoot::GetId Yöntemi

Sanal işlemci kökü için benzersiz bir tanımlayıcı döndürür.

virtual unsigned int GetId() const = 0;

İade Değeri

Tamsayı tanımlayıcısı.

Ayrıca bkz.

Eşzamanlılık Ad Alanı