UPDATE: Jonathan Wakely gentilmente guardato il problema di un he says (below in comments) che -pthread
deve essere passato sia al compilatore e il linker . Se lo faccio, anche il codice non fallisce con gcc 4.7.2. Quindi la risposta non ha apparentemente nulla a che fare con l'e-mail citata. Grazie Jonathan!
Ecco alcune citazioni dritto formano lo sviluppatore gcc Jonathan Wakely's mail, scritto nel 2011:
Tutti gli operatori di confronto sulla nostra std :: :: filo id contare su indefinito comportamento perché il nostro thread :: id è solo un pthread_t.
[...]
2) operatore == utilizza pthread_equal, che non è definito per invalidi ID filo , POSIX dice:
If either t1 or t2 are not valid thread IDs, the behavior is undefined.
Anche se è stato scritto due anni fa , probabilmente si applica ancora. Al momento non riesco a controllare la codebase di gcc per aggiungere altro.
Strano. Il seguente codice:
#include <iostream>
#include <thread>
int main() {
std::cout << "Started" << std::endl;
std::thread::id nobody;
if (nobody != std::this_thread::get_id()) {
std::cout << "OK" << std::endl;
}
std::cout << "Finished" << std::endl;
}
produce:
Started
OK
Finished
Controllare here. Tuttavia il tuo codice non funziona con 4.7.2.
@Ali Forse il suo libstdC++ non è aggiornato? –