Jakie jest najlepsze rozwiązanie do wstrzymania i wznowienia pthreads?

Znalazłem następujący temat (tutaj) o pthreads, ale istnieje wiele dobrych rozwiązań.

Chciałem wiedzieć, czy następujący fragment kodu jest poprawny, a jeśli tak, to dlaczego ten sam zamek jest używany do wywoływania pthread_cond_wait, a także dostępu do niego, a następnie odblokowany od razu:

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

Czy nie byłoby lepiej użyć 2 oddzielnych muteksów tutaj, czy jest to właściwy sposób na zawieszenie pthread?

Z góry dziękuję!

EDYTOWAĆ:

Niesamowite odpowiedzi, dzięki wszystkim. Jeszcze jedno powiązane pytanie. Ponieważ chcę wznowić wątek osobno w innej funkcji, czy byłoby to bardziej właściwe w przypadku wznawiania go?

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);
}

Jeszcze raz dziękuję wszystkim !! : ~)

questionAnswers(3)

yourAnswerToTheQuestion