Ich habe gcc-4.8.1 (configure: ./configure --prefix =/usr/local) verwendet, um folgenden Code in Ubuntu 12.04 zu kompilieren, aber als ich es ausführte, funktionierte es nicht. es hörte nicht auf den Mutex zu warten. Es wurde falsch zurückgegeben und "Hallo Welt!"Warum funktioniert std :: timed_mutex :: try_lock_for nicht?
Befehl: g ++ -std = C++ 11 main.cpp -omain -pthread
Als ich noch gcc-4.6 (apt-get install g ++), es zu kompilieren, ist es gut funktioniert. Das Programm wartete etwa zehn Sekunden und gab "Hallo Welt!"
#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; }
Danke, wenn ich _GLIBCXX_USE_CLOCK_MONOTONIC deaktivieren, haben gcc-4.8 und gcc-4.6 das gleiche Verhalten. Und ich denke, dass der Grund, warum sie ein anderes Verhalten haben, dieser Marco ist. – miskcoo
Für alle, die gcc/g ++ auf 4.9 upgraden möchten (wo der Fehler behoben wurde), folgen Sie [diesen Anweisungen] (http://superuser.com/a/394811/235047) für Ubuntu, ersetzen Sie einfach '4.6' mit "4.9". – Garrett
Wie aktivieren Sie _GLIBCXX_USE_CLOCK_MONOTONIC? – SomethingSomething