¿Cuál es la mejor solución para pausar y reanudar pthreads?

He encontrado el siguiente tema (aquí) sobre pthreads pero hay muchas buenas soluciones.

Quería saber si el siguiente fragmento de código es válido y, de ser así, por qué se usa el mismo bloqueo para llamar a pthread_cond_wait, así como para acceder a él y luego desbloquearlo de inmediato:

void suspendMe()
{
    pthread_mutex_lock(&m_SuspendMutex);
    pthread_cond_wait(&m_ResumeCond, &m_SuspendMutex);
    pthread_mutex_unlock(&m_SuspendMutex);
}

¿No sería mejor usar 2 mutexes separados aquí, o es esta la forma correcta de suspender un pthread?

¡Gracias por adelantado!

EDITAR:

Respuestas impresionantes, gracias a todos. Sólo una pregunta más relacionada. Ya que quiero reanudar un hilo por separado en otra función, ¿sería esto más apropiado para reanudarlo?

void suspendMe()
{
    pthread_mutex_lock(&m_SuspendMutex);
    pthread_cond_wait(&m_ResumeCond, &m_SuspendMutex);
}
void resumeMe()
{
    pthread_cond_signal(&m_ResumeCond);
    pthread_mutex_unlock(&m_SuspendMutex);
}

Gracias de nuevo a todos !! : ~)

Respuestas a la pregunta(3)

Su respuesta a la pregunta