Quote Originariamente inviata da lovesemiramide Visualizza il messaggio
Uso i thread che il c++11 mette a disposizione.
Il punto è che mi stampa direttamente "FOOBAR" senza aspettare 2 secondi.
Perché ti aspetti qualcosa di diverso? Stai facendo partire i due thread praticamente insieme, nel momento in cui chiami la join con ogni probabilità entrambi i thread sono già terminati. (tra l'altro, potresti anche ottenere BARFOO o qualunque mescolanza dei caratteri, dato che non hai locking explicito)
Inoltre ho notato che se semplicemente associo un thread ad una funzione il programma genera una active exception quando viene chiamato il distruttore.
Distruttore di che oggetto? Comunque, se hai un oggetto allocato nel thread principale ma usato nei thread, e questo esce di scope (per terminazione del main) è normale ottenere un errore.

Cercando una soluzione ho trovato un altro "comportamento" strano: se commento le righe nelle quali eseguo le join mi stampa a video sempre "FOOBAR" anche se non chiamo mai le due funzioni.
I thread partono al momento della creazione degli oggetti-thread; a differenza di altre librerie di threading, i thread C++11 (così come i thread Boost) partono immediatamente.