Ho usato gcc-4.8.1 (configura: ./configure --prefix =/usr/local) per compilare il codice seguente in Ubuntu 12.04, ma quando l'ho eseguito, non ha funzionato. non si è fermato ad aspettare il mutex. Ha restituito false e ha generato "Hello world!"Perché std :: timed_mutex :: try_lock_for non funziona?
comando: g ++ -std = C++ 11 main.cpp -omain -pthread
Quando usato gcc-4.6 (apt-get install g ++) per compilare, ha funzionato bene. Il programma ha atteso circa dieci secondi e ha prodotto "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; }
Grazie, quando disattivo _GLIBCXX_USE_CLOCK_MONOTONIC, gcc-4.8 e gcc-4.6 hanno lo stesso comportamento. E penso che il motivo per cui hanno un comportamento diverso è questo marco. – miskcoo
Per chiunque voglia aggiornare gcc/g ++ a 4.9 (dove è stato corretto il bug), quindi seguire [queste istruzioni] (http://superuser.com/a/394811/235047) per Ubuntu, sostituendo semplicemente '4.6' con '4.9'. – Garrett
Come abilitare _GLIBCXX_USE_CLOCK_MONOTONIC? – SomethingSomething