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 !! : ~)