void fun1(mystack<std::function<bool()>>& stk, int const& n) { if (n<0) return; for (int itr = 0; itr<n; ++itr) { std::cout << "fun1: " + std::to_string(itr) << std::endl; stk.push(std::function<bool()>([itr, n](){return itr == n - 1; })); stk.emplace(std::function<bool()>([itr, n](){return false; })); } // à ce stade le .top() de stk va renvoyé ()->true }
void fun2(mystack<std::function<bool()>>& stk) { bool done = false; int itr = 0; while (!done) { std::mutex mtx; std::unique_lock<std::mutex> lck(mtx); stk.not_empty.wait(lck, [&](){ return !stk.empty(); }); // On prend le premier élement auto msg = stk.top(); stk.pop(); // Tu fais ton traitement avec 'msg' et tu mets à jour 'done' std::cout << "fun2: " + std::to_string(itr) << std::endl; ++itr; done = msg(); // par exemple } }
int sortStack(mystack s, mystack &t) { while(!s.empty()) { int tmp = s.top(); s.pop(); while(!t.empty() && t.top() > tmp) { s.push(t.top()); t.pop(); } t.push(tmp); } return 0; }