我知道下面的代碼可能不是任務調度程式 但是,試圖在理解調度程式時獲得您的寶貴意見
我試圖理解并提出一個可以稱為 TaskScheduler 的最低限度的代碼。我有以下代碼,但不確定它是否足以作為調度。有人可以提供評論和代碼框架參考或鏈接嗎?
謝謝!!
#include <iostream>
#include <thread>
#include <future>
#include <queue>
#include <mutex>
#include <condition_variable>
using namespace std;
int factorial_loc(int val) {
int res = 1;
while(val>0) {
res *= val;
val--;
}
return res;
}
queue<packaged_task<int()>> q;
mutex mtx;
condition_variable cond;
void thread_1() {
unique_lock<mutex> ul(mtx);
cond.wait(ul, [](){
return !q.empty();
});
auto f = std::move(q.front());
q.pop();
f();
}
void run_packaged_task()
{
packaged_task<int(int)> t(factorial_loc);
packaged_task<int()> t2(std::bind(factorial_loc, 4));
future<int> f = t2.get_future();
thread t1(thread_1);
{
unique_lock<mutex> ul(mtx);
q.push(std::move(t2));
}
cond.notify_one();
cout<<"\n Res: "<<f.get();
t1.join();
}
uj5u.com熱心網友回復:
我有以下代碼,但不確定它是否足以作為調度。
為什么不這樣做呢?
void run_packaged_task()
{
cout << "\n Res: " << factorial_loc(4);
}
也許你認為我的版本run_packaged_task()不是調度器。好吧,好吧。我也不這么認為。但是,據呼叫者所知,我的版本與您的版本完全相同;
- 它計算 4 的階乘,
- 它將結果寫入
cout, - 然后,只有完成后,它才會回傳。
您的代碼包含調度程式的一些部分;一個執行緒、一個佇列、一種表示任務的資料型別,但您不使用這些部分中的任何一個來執行任何看起來像調度的事情。
IMO,您需要考慮“調度程式”的含義。您希望調度程式做什么?
調度程式是否應該盡快執行每個任務?或者,如果不是,那么什么時候?來電者怎么說?調度程式如何將任務的執行推遲到這樣的時間?
呼叫者是否必須等到任務完成?呼叫者是否可以選擇等待?
我不知道您所說的“調度程式”究竟是什么意思,但如果我的猜測是正確的,那么它與執行緒池有一些共同之處。如果您從搜索如何實作簡單執行緒池的示例開始,然后考慮如何“改進”它以制作“調度程式”,也許您可??以獲得一些牽引力。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424570.html
