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);
}
アンソニーが示唆するように、これを自由に提案してください。また、お気軽にご利用いただき、実際に役立ったかどうかをお知らせください。