Struktur IVirtualProcessorRoot
Abstraksi untuk utas perangkat keras tempat proksi utas dapat dijalankan.
Sintaks
struct IVirtualProcessorRoot : public IExecutionResource;
Anggota
Metode Publik
Nama | Deskripsi |
---|---|
IVirtualProcessorRoot::Activate | Menyebabkan proksi utas yang terkait dengan antarmuka pContext konteks eksekusi mulai dijalankan pada akar prosesor virtual ini. |
IVirtualProcessorRoot::D eactivate | Menyebabkan proksi utas yang saat ini dijalankan pada akar prosesor virtual ini berhenti mengirimkan konteks eksekusi. Proksi utas akan melanjutkan eksekusi pada panggilan ke Activate metode . |
IVirtualProcessorRoot::EnsureAllTasksVisible | Menyebabkan data yang disimpan dalam hierarki memori prosesor individu menjadi terlihat oleh semua prosesor pada sistem. Ini memastikan bahwa pagar memori penuh telah dijalankan pada semua prosesor sebelum metode kembali. |
IVirtualProcessorRoot::GetId | Mengembalikan pengidentifikasi unik untuk akar prosesor virtual. |
Keterangan
Setiap akar prosesor virtual memiliki sumber daya eksekusi terkait. Antarmuka IVirtualProcessorRoot
mewarisi dari antarmuka IExecutionResource . Beberapa akar prosesor virtual mungkin sesuai dengan utas perangkat keras yang mendasar yang sama.
Resource Manager memberikan root prosesor virtual kepada penjadwal sebagai respons terhadap permintaan sumber daya. Penjadwal dapat menggunakan akar prosesor virtual untuk melakukan pekerjaan dengan mengaktifkannya dengan konteks eksekusi.
Hierarki Warisan
IVirtualProcessorRoot
Persyaratan
Header: concrtrm.h
Namespace: konkurensi
IVirtualProcessorRoot::Activate Method
Menyebabkan proksi utas yang terkait dengan antarmuka pContext
konteks eksekusi mulai dijalankan pada akar prosesor virtual ini.
virtual void Activate(_Inout_ IExecutionContext* pContext) = 0;
Parameter
pContext
Antarmuka ke konteks eksekusi yang akan dikirim pada akar prosesor virtual ini.
Keterangan
Resource Manager akan menyediakan proksi utas jika tidak terkait dengan antarmuka konteks eksekusi pContext
Metode Activate
ini dapat digunakan untuk mulai menjalankan pekerjaan pada akar prosesor virtual baru yang dikembalikan oleh Resource Manager, atau untuk melanjutkan proksi utas pada akar prosesor virtual yang telah dinonaktifkan atau akan dinonaktifkan. Lihat IVirtualProcessorRoot::D eactivate untuk informasi selengkapnya tentang penonaktifan. Ketika Anda memulai kembali akar prosesor virtual yang dinonaktifkan, parameter pContext
harus sama dengan parameter yang digunakan untuk menonaktifkan akar prosesor virtual.
Setelah akar prosesor virtual diaktifkan untuk pertama kalinya, pasangan panggilan berikutnya ke Deactivate
dan Activate
dapat berlomba satu sama lain. Ini berarti dapat diterima bagi Resource Manager untuk menerima panggilan Activate
sebelum menerima panggilan yang Deactivate
dimaksudkan.
Saat Anda mengaktifkan akar prosesor virtual, Anda memberi sinyal ke Resource Manager bahwa akar prosesor virtual ini saat ini sibuk dengan pekerjaan. Jika penjadwal Anda tidak dapat menemukan pekerjaan apa pun untuk dijalankan pada root ini, diharapkan untuk memanggil Deactivate
metode yang memberi tahu Resource Manager bahwa akar prosesor virtual menganggur. Resource Manager menggunakan data ini untuk menyeimbangkan beban sistem.
invalid_argument
dilemparkan jika argumen pContext
memiliki nilai NULL
.
invalid_operation
dilemparkan jika argumen pContext
tidak mewakili konteks eksekusi yang baru-baru ini dikirim oleh akar prosesor virtual ini.
Tindakan mengaktifkan akar prosesor virtual meningkatkan tingkat langganan utas perangkat keras yang mendasar satu per satu. Untuk informasi selengkapnya tentang tingkat langganan, lihat IExecutionResource::CurrentSubscriptionLevel.
Metode IVirtualProcessorRoot::D eactivate
Menyebabkan proksi utas yang saat ini dijalankan pada akar prosesor virtual ini berhenti mengirimkan konteks eksekusi. Proksi utas akan melanjutkan eksekusi pada panggilan ke Activate
metode .
virtual bool Deactivate(_Inout_ IExecutionContext* pContext) = 0;
Parameter
pContext
Konteks yang saat ini sedang dikirim oleh root ini.
Tampilkan Nilai
Nilai boolean. Nilai true
menunjukkan bahwa proksi utas dikembalikan dari Deactivate
metode sebagai respons terhadap panggilan ke Activate
metode . Nilai false
menunjukkan bahwa proksi utas dikembalikan dari metode sebagai respons terhadap peristiwa pemberitahuan di Resource Manager. Pada penjadwal utas schedulable mode pengguna (UMS), ini menunjukkan bahwa item telah muncul pada daftar penyelesaian penjadwal, dan penjadwal diperlukan untuk menanganinya.
Keterangan
Gunakan metode ini untuk menghentikan sementara eksekusi akar prosesor virtual saat Anda tidak dapat menemukan pekerjaan apa pun di penjadwal Anda. Panggilan ke Deactivate
metode harus berasal dari dalam Dispatch
metode konteks eksekusi yang terakhir diaktifkan oleh akar prosesor virtual. Dengan kata lain, proksi utas yang memanggil Deactivate
metode haruslah yang saat ini dijalankan pada akar prosesor virtual. Memanggil metode pada akar prosesor virtual yang tidak Anda jalankan dapat mengakibatkan perilaku yang tidak ditentukan.
Akar prosesor virtual yang dinonaktifkan dapat dibangunkan dengan panggilan ke Activate
metode , dengan argumen yang sama yang diteruskan ke Deactivate
metode . Penjadwal bertanggung jawab untuk memastikan bahwa panggilan ke Activate
metode dan Deactivate
dipasangkan, tetapi mereka tidak diharuskan untuk diterima dalam urutan tertentu. Resource Manager dapat menangani penerimaan panggilan ke Activate
metode sebelum menerima panggilan ke metode yang Deactivate
dimaksudkannya.
Jika akar prosesor virtual terbangun dan nilai pengembalian dari Deactivate
metode adalah nilai false
, penjadwal harus meminta daftar penyelesaian UMS melalui metode , bertindak berdasarkan informasi tersebut IUMSCompletionList::GetUnblockNotifications
, dan kemudian memanggil metode lagi Deactivate
. Ini harus diulang sampai metode mengembalikan Deactivate
nilai true
.
invalid_argument
dilemparkan jika argumen pContext
memiliki nilai NULL.
invalid_operation
dilemparkan jika akar prosesor virtual belum pernah diaktifkan, atau argumen pContext
tidak mewakili konteks eksekusi yang baru-baru ini dikirim oleh akar prosesor virtual ini.
Tindakan menonaktifkan akar prosesor virtual mengurangi tingkat langganan utas perangkat keras yang mendasar satu per satu. Untuk informasi selengkapnya tentang tingkat langganan, lihat IExecutionResource::CurrentSubscriptionLevel.
IVirtualProcessorRoot::EnsureAllTasksVisible Method
Menyebabkan data yang disimpan dalam hierarki memori prosesor individu menjadi terlihat oleh semua prosesor pada sistem. Ini memastikan bahwa pagar memori penuh telah dijalankan pada semua prosesor sebelum metode kembali.
virtual void EnsureAllTasksVisible(_Inout_ IExecutionContext* pContext) = 0;
Parameter
pContext
Konteks yang saat ini sedang dikirim oleh akar prosesor virtual ini.
Keterangan
Anda mungkin menemukan metode ini berguna ketika Anda ingin menyinkronkan penonaktifan akar prosesor virtual dengan penambahan pekerjaan baru ke dalam penjadwal. Untuk alasan performa, Anda dapat memutuskan untuk menambahkan item kerja ke penjadwal Anda tanpa menjalankan penghapus memori, yang berarti item kerja yang ditambahkan oleh utas yang dijalankan pada satu prosesor tidak segera terlihat oleh semua prosesor lain. Dengan menggunakan metode ini bersama dengan metode , Deactivate
Anda dapat memastikan bahwa penjadwal Anda tidak menonaktifkan semua akar prosesor virtualnya saat item kerja ada di koleksi penjadwal Anda.
Panggilan ke EnsureAllTasksVisibleThe
metode harus berasal dari dalam Dispatch
metode konteks eksekusi yang terakhir diaktifkan oleh akar prosesor virtual. Dengan kata lain, proksi utas yang memanggil EnsureAllTasksVisible
metode haruslah yang saat ini dijalankan pada akar prosesor virtual. Memanggil metode pada akar prosesor virtual yang tidak Anda jalankan dapat mengakibatkan perilaku yang tidak ditentukan.
invalid_argument
dilemparkan jika argumen pContext
memiliki nilai NULL
.
invalid_operation
dilemparkan jika akar prosesor virtual belum pernah diaktifkan, atau argumen pContext
tidak mewakili konteks eksekusi yang baru-baru ini dikirim oleh akar prosesor virtual ini.
Metode IVirtualProcessorRoot::GetId
Mengembalikan pengidentifikasi unik untuk akar prosesor virtual.
virtual unsigned int GetId() const = 0;
Tampilkan Nilai
Pengidentifikasi bilangan bulat.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk