En C++11 se han introducido muchas mejoras que nos ayudan a desarrollar sistemas multi-hilo. Voy a centrarme en los Mutex.
En las versiones anteriores a C++11 una forma de obtener un Mutex es el que nos proporciona la librería pthread, pero para utilizarlo debíabos inicializarlo y destruirlo al estilo C, en definitiva, tienes que hacer algo más que lock/unlock cada vez que trabajas con un mutex.
C++11 nos proporciona una Clase Mutex, que nos abstrae de cosas que no sean lock/unclock.
#include <mutex>
std::mutex mtx;
void do_something (int i) {
mtx.lock();
// critical section
mtx.unlock();
}
En C++11 también puedes utilizar el Mutex con una guarda genérica.
Si sigues trabajando con versiones del compilador anteriores a C++11, hace tiempo me hice un wrapper que te ayuda a abstraerte del mutex de pthread, lo dejo aquí abajo por si a alguien le resulta útil: [gist].