В какой момент нужно блокировать мьютекс?

В ВУЗе сказали, что я слишком рано блокирую мьютекс в следующем фрагменте кода. Якобы, его нужно блокировать после цикла do while. Объясните, пожалуйста, почему я не прав и как можно было бы исправить данную ошибку.

void *writeFunction(void *argm){
    // имитация  обработки данных
    usleep(500);
    pthread_mutex_lock(&mutex);
    Client temp;
    int choice = 0;
    do{
        std::cout << "Введите данные" << std::endl;
        std::cin >> temp;
        std::cout << "Продолжить? (0/1): "; std::cin >> choice;
        messages.push(temp);
    }while(choice != 0);
    if(messages.size() != 0){
        pthread_cond_signal(&condition);
    }
    pthread_mutex_unlock(&mutex);
    return nullptr;
}

Ответы (0 шт):