【发布时间】:2020-02-18 07:49:33
【问题描述】:
我不明白为什么 std::condition_variable 比这段代码有更多的标准保证:
class condition_variable {
public:
void notify_one() {}
void notify_all() {}
void wait(unique_lock<mutex> &lock) {
lock.unlock();
this_thread::sleep_for(15ms);
lock.lock();
}
void wait(unique_lock<mutex> &lock,
const function<bool()> &pred) {
while (!pred()) wait(lock);
}
};
【问题讨论】:
-
关于错误信号触发器的问题 - 在某些系统上可能没有(以免调用程序终止或类似的东西),只有通知会重新唤醒线程。但在其他一些系统上它可能会更大。
-
好吧,对于初学者来说,你是怎么碰巧选择了 15ms 的?我们希望为任何给定操作系统和硬件平台实现
wait()的人将针对特定操作系统/硬件组合以最佳方式执行此操作。事实上,wait()被允许“虚假地”返回,这一事实为某些操作系统和硬件组合的实现者提供了使其工作方式的一些灵活性。
标签: c++ multithreading condition-variable