Por que não há função de espera para a variável de condição, que não trava novamente o mutex

Considere o seguinte exemplo.

std::mutex mtx;
std::condition_variable cv;

void f()
{
  {
    std::unique_lock<std::mutex>  lock( mtx );
    cv.wait( lock );  // 1
  }
  std::cout << "f()\n";
}

void g()
{
  std::this_thread::sleep_for( 1s );
  cv.notify_one();
}

int main()
{
  std::thread  t1{ f };
  std::thread  t2{ g };
  t2.join();
  t1.join();
}

g() "Sabe dissof() está esperando no cenário que eu gostaria de discutir. De acordo comcppreference.com não há necessidade deg() bloquear o mutex antes de chamarnotify_one. Agora na linha marcada "1"cv libera o mutex e o bloqueia novamente assim que a notificação é enviada. O destruidor delock lança novamente imediatamente depois disso. Isso parece supérfluo, especialmente porque o bloqueio é caro. (Eu sei que em certos cenários o mutex precisa ser bloqueado. Mas este não é o caso aqui.)

Porquecondition_variable não tem função "wait_nolock"que não reinicia o mutex assim que a notificação chega. Se a resposta é que os pthreads não fornecem essa funcionalidade: Por que os pthreads não podem ser estendidos para fornecê-lo? Existe uma alternativa para realizar o comportamento desejado?

questionAnswers(1)

yourAnswerToTheQuestion