Użyłem gcc-4.8.1 (configure: ./configure --prefix =/usr/local) do skompilowania następującego kodu w Ubuntu 12.04, ale kiedy go uruchomiłem, to nie zadziałało. nie przestawał czekać na muteksa. Zwrócił wartość false i wyświetlił komunikat "Witaj, świecie!"Dlaczego std :: timed_mutex :: try_lock_for nie działa?
polecenie: g ++ -std = C++ 11 main.cpp -omain -pthread
Kiedy użyłem gcc-4.6 (apt-get install g ++), aby go skompilować, to działa dobrze. Program czekał około dziesięciu sekund i wyświetlił "Hello world!"
#include <thread> #include <iostream> #include <chrono> #include <mutex> std::timed_mutex test_mutex; void f() { test_mutex.try_lock_for(std::chrono::seconds(10)); std::cout << "hello world\n"; } int main() { std::lock_guard<std::timed_mutex> l(test_mutex); std::thread t(f); t.join(); return 0; }
Dzięki, gdy wyłączyłem _GLIBCXX_USE_CLOCK_MONOTONIC, gcc-4.8 i gcc-4.6 zachowują się tak samo. I myślę, że powodem, dla którego mają inne zachowanie, jest to marco. – miskcoo
Dla każdego, kto chce uaktualnić gcc/g ++ do 4.9 (tam, gdzie naprawiono błąd), postępuj zgodnie z [tymi instrukcjami] (http://superuser.com/a/394811/235047) dla Ubuntu, zastępując '4.6' "4.9". – Garrett
Jak włączyć _GLIBCXX_USE_CLOCK_MONOTONIC? – SomethingSomething