gpt4 book ai didi

c++ - this_thread::sleep_for 影响其他线程

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:37 25 4
gpt4 key购买 nike

我有一个包含两个线程的简单程序,一个将 packaged_task 推送到一个 deque 中,另一个执行它。在任务中有一个 this_thread::sleep_for,我希望只有“进程”线程会等待它,但两者都在等待,从而使执行顺序进行。我缺少什么?

#include <future>
#include <iostream>
#include <deque>

std::mutex m;
std::condition_variable cv;
std::deque<std::packaged_task<void(int)>> deque;

void post() {
int id = 0;
auto lambda = [](int id) {
std::this_thread::sleep_for(std::chrono::seconds(std::rand() % 10 + 1));
std::cout << id << std::endl;
};
while (true) {
std::this_thread::sleep_for(std::chrono::seconds(1));

std::packaged_task<void(int)> task(lambda);
task(id++);

std::lock_guard<std::mutex> lg(m);
deque.emplace_back(std::move(task));

cv.notify_one();
}
}

void process() {
std::deque<std::packaged_task<void(int)>> to_exec;
while (true) {

while (!to_exec.empty()){
std::future<void> fut = to_exec.front().get_future();
fut.get();

to_exec.pop_front();
}

std::unique_lock<std::mutex> lk(m);
cv.wait(lk, []() {return !deque.empty(); });

while (!deque.empty()) {
to_exec.push_back(std::move(deque.front()));
deque.pop_front();
}
}
}

int main() {

std::thread tpost(post);
std::thread tprocess(process);

tpost.join();
tprocess.join();
}

最佳答案

我认为使用 std::async 会更有效而不是 sleep 随机秒...

关于c++ - this_thread::sleep_for 影响其他线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44328729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com