Why should I prefer one or another in practice?
What are technical differences except that std::thread is a class?
The std::thread library is implemented on top of pthreads in an environment supporting pthreads (for example: libstdc++).
I think the big difference between the two is abstraction. std::thread is a C++ class library. The std::thread library includes many abstract features, for example: scoped locks, recursive mutexes, future/promise design pattern implementations, and more.