scoped_lock を使用して 2 つのミューテックスをロックした後、キューから抽出されたタスクを実行する必要があります。問題は、タスクをキューから別のタスクにスワップしてから実行することです。これまでのところ、これが私の出発点です
std::packaged_task<void(Job)> task;
{
std::scoped_lock scopedLock(w_mutex, r_mutex);
const std::packaged_task<void(Job)>& top_task = waitingJobsQueue.top();
waitingJobsQueue.pop();
runningJobsQueue.push(task);
}
task();
しかし、タスクを変数に保存して後で実行することはできません。