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
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ı Deactivate
Activate
ç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 NULL
varsa 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 false
ise, 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 true
dö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 NULL
varsa 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.
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