看起來好像condition_variable
notify_one
並不總是按照它應該的方式工作。condition_variable不總是正常工作
struct Task {
std::mutex mutex;
std::condition_variable cv;
std::atomic_bool launch{false};
};
void job(Task& task) {
std::unique_lock<std::mutex> lock{task.mutex};
task.cv.wait(lock, [&]{ return task.launch == true; });
}
int main() {
for (auto i=0 ; i<1000*1000 ; i++) {
Task task;
std::thread thread{job, std::ref(task)};
task.launch = true;
task.cv.notify_one();
thread.join();
}
}
這個程序幾乎永遠不會結束,絕大多數時間它會永遠停留在循環中。 這是爲什麼發生?
發生了什麼,你期望發生什麼?這些是一個很好的問題的基本部分... –
謝謝@UlrichEckhardt,我希望程序能夠完成,而且幾乎從來不會。 –
它究竟在哪裏掛?哪一行是成功執行的最後一行? –