Dlaczego brak obsługi timeout w std :: lock?
Ponieważ nikt nie zaproponował go.
Ponieważ ten obszar był tak kontrowersyjny, że im mniej proponowano, tym bardziej prawdopodobne, że zostanie zaakceptowany.
Ponieważ baliśmy się, że jeśli wszystko ustandaryzujemy, znudzisz się.
Zostało to jako ćwiczenie dla czytelnika.
Hmm ... Biegnę z pomysłów ... :-)
Oh!
Jest łatwo można zrobić samemu, jeśli jest to potrzebne:
Aktualizacja
Oto przepisać Lubię lepiej:
#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);
}
Jak sugeruje Anthony, nie krępuj się zaproponować to. Możesz też po prostu go użyć i poinformować nas, czy rzeczywiście było przydatne, czy nie.
'std :: lock' nie jest typem, [jest funkcją] (http://en.cppreference.com/w/cpp/thread/lock). :) – Xeo
@Xeo: Dobrze, duh, dzięki. Edytowane. – KnowItAllWannabe
@Nicol: Co jest złego w przekazywaniu odroczonych blokad? 'std :: lock' akceptuje każdy rodzaj blokady i nie będziesz musiał się martwić o odblokowanie w późniejszym czasie. – Xeo