Why should I prefer one or another in practice?
What are technical differences except that std::thread is a class?
If you want to run code on many platforms, go for Posix Threads. They are available almost everywhere and are quite mature. On the other hand if you only use Linux/gcc
std::thread is perfectly fine - it has a higher abstraction level, a really good interface and plays nicely with other C++11 classes.
std::thread class unfortunately doesn't work reliably (yet) on every platform, even if C++11 seems available. For instance in native Android
std::thread or Win64 it just does not work or has severe performance bottlenecks (as of 2012).
A good replacement is
boost::thread - it is very similar to
std::thread (actually it is from the same author) and works reliably, but, of course, it introduces another dependency from a third party library.
Edit: As of 2017,
std::thread mostly works on native Android. Some classes, like
std::timed_mutex are still not implemented.