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].