为什么 std::lock 不支持超时?
因为没有人提议。
因为这个领域争议很大,建议越少,被接受的可能性就越大。
因为我们害怕如果我们把所有东西都标准化,你会觉得无聊。
它留给读者作为练习。
嗯...我的想法不多了... :-)
哦!
如果您需要,您可以轻松地自己做:
更新
这是我更喜欢的重写:
#include <mutex>
#include <chrono>
template <class Clock, class Duration, class L0, class L1>
int
try_lock_until(std::chrono::time_point<Clock, Duration> t, L0& l0, L1& l1)
{
std::unique_lock<L0> u0(l0, t);
if (u0.owns_lock())
{
if (l1.try_lock_until(t))
{
u0.release();
return -1;
}
else
return 1;
}
return 0;
}
template <class Rep, class Period, class L0, class L1>
int
try_lock_for(std::chrono::duration<Rep, Period> d, L0& l0, L1& l1)
{
return try_lock_until(std::chrono::steady_clock::now() + d, l0, l1);
}
int main()
{
std::timed_mutex m1, m2;
try_lock_for(std::chrono::milliseconds(50), m1, m2);
}
正如安东尼建议的那样,请随意提出这个建议。也可以随意使用它,让我们知道它是否真的有用。