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

IExecutionResource

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

Namespace layanan konkurensi