Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Abstraksi untuk utas perangkat keras tempat proksi utas dapat dijalankan.
Sintaks
struct IVirtualProcessorRoot : public IExecutionResource;
Anggota
Metode Publik
| Nama | Deskripsi |
|---|---|
| IVirtualProcessorRoot::Activate | Menyebabkan thread proxy yang terkait dengan antarmuka konteks eksekusi pContext untuk memulai eksekusi pada akar prosesor virtual ini. |
| IVirtualProcessorRoot::Deactivate | Menyebabkan proksi utas yang saat ini dijalankan pada akar prosesor virtual ini berhenti mengirimkan konteks eksekusi. Proksi utas akan melanjutkan eksekusi saat metode Activate dipanggil. |
| 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 pemroses virtual mungkin sesuai dengan utas perangkat keras yang sama secara mendasar.
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 Pewarisan
IVirtualProcessorRoot
Persyaratan
Header: concrtrm.h
Namespace: konkurensi
IVirtualProcessorRoot::Metode Activate
Menyebabkan proksi utasan yang terkait dengan antarmuka konteks eksekusi pContext mulai berjalan pada inti prosesor virtual ini.
virtual void Activate(_Inout_ IExecutionContext* pContext) = 0;
Parameter
pContext
Antarmuka untuk konteks pelaksanaan yang akan dijalankan pada inti prosesor virtual ini.
Keterangan
Resource Manager akan menyediakan sebuah proksi utas jika tidak ada yang berasosiasi 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::Deactivate untuk informasi lebih lanjut mengenai 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 Resource Manager dapat menerima panggilan ke Activate sebelum menerima panggilan ke Deactivate yang sebenarnya ditujukan untuknya.
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 memanggil metode Deactivate yang memberi tahu Resource Manager bahwa akar prosesor virtual sedang 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.
Mengaktifkan inti prosesor virtual menambah level langganan dari utas perangkat keras sebanyak satu. Untuk informasi selengkapnya tentang tingkat langganan, lihat IExecutionResource::CurrentSubscriptionLevel.
Metode IVirtualProcessorRoot::Deactivate
Menyebabkan proksi utas yang saat ini dijalankan pada akar prosesor virtual ini berhenti mengirimkan konteks eksekusi. Proksi utas akan melanjutkan eksekusi saat metode Activate dipanggil.
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 thread dikembalikan dari metode Deactivate sebagai tanggapan terhadap pemanggilan metode Activate. Nilai false menunjukkan bahwa proksi thread dikembalikan dari metode ini sebagai tanggapan terhadap event notifikasi di Resource Manager. Pada penjadwal utas mode pengguna yang dapat dijadwalkan (UMS), ini menunjukkan bahwa item telah muncul dalam daftar penyelesaian tugas penjadwal, dan penjadwal harus 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 metode Deactivate harus berasal dari dalam metode Dispatch pada konteks eksekusi di mana akar prosesor virtual terakhir diaktifkan dengan. Dengan kata lain, proksi thread yang memanggil metode Deactivate haruslah yang sedang berjalan pada root 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 memanggil metode Activate, dengan argumen yang sama seperti yang diteruskan ke metode Deactivate. Penjadwal bertanggung jawab untuk memastikan bahwa panggilan ke metode Activate dan Deactivate dipasangkan, tetapi tidak harus diterima dalam urutan tertentu. Resource Manager dapat menangani menerima panggilan ke metode Activate sebelum menerima panggilan ke metode Deactivate yang dimaksud.
Jika akar prosesor virtual terbangun dan nilai pengembalian dari metode Deactivate adalah nilai false, penjadwal harus meminta daftar penyelesaian UMS melalui metode IUMSCompletionList::GetUnblockNotifications, bertindak berdasarkan informasi tersebut, dan kemudian memanggil metode Deactivate lagi. Ini harus diulang hingga metode Deactivate mengembalikan 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 core prosesor virtual mengurangi tingkat langganan utas perangkat keras mendasar sebanyak satu. Untuk informasi selengkapnya tentang tingkat langganan, lihat IExecutionResource::CurrentSubscriptionLevel.
IVirtualProcessorRoot::PastikanSemuaTugasTampak 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 diproses oleh inti 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 barrier 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 virtual 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 metode EnsureAllTasksVisible haruslah yang sedang dieksekusi 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.