Generalnie, gdy już zasygnalizujesz, że coś się zmieniło (przez zmienną warunku), potrzebujesz kodu, który będzie działał, aby obsłużyć tę zmianę, i który kod musi bezpiecznie odczytać zmienione dane. Jeśli nie masz blokady powiązanej z cv, to twój wątek czekający na cv może się obudzić, wtedy spróbuj (i nie powiodło się), aby zdobyć blokadę związaną z danymi, a zatem musisz ją ponownie uzyskać. Z kombinacją CV/Lock system bazowy może obudzić twój wątek tylko wtedy, gdy wątek może uzyskać odpowiednią blokadę jako jednostkę, a więc być bardziej wydajny.
Jest to mało prawdopodobne, aby samo CV było użyteczne, ponieważ nie zawiera żadnych danych powyżej faktu, że zostało zasygnalizowane. Jeśli wyobrazisz sobie zastosowania cv - takie jak lista bezpiecznych wątków z producentami i konsumentami, masz zmienne reprezentujące {list, cv, lock}
. W takim przypadku weź blokadę, zmodyfikuj listę, zwolnij blokadę, a następnie skieruj cv. Na twoim wątku konsumenckim najprawdopodobniej będziesz potrzebował wziąć blokadę raz sygnalizowaną do działania na liście, więc posiadanie blokady po przebudzeniu z sygnalizowanego CV jest dobrą rzeczą.
Spójrz na coś podobnego do wydarzeń w oknach (:: CreateEvent), które są cv-ami bez niejawnej blokady, przez wiele czasu będą miały blokadę z nimi związaną, ale po prostu nie wbudowane w rzeczywiste użycie.
Mimo że nie jest to pierwotny powód, dla którego stworzono zmienną warunkową w pthreads (użyli blokady do ochrony samego cv, która nie jest już potrzebna w języku C++), przyczyna i użyteczność blokad z cv została przeniesiona na to, co jest w tym odpowiedź.
Muteks to blokada. Blokada klasy wątków jest po prostu opakowaniem RAII wokół muteksu, więc nie jest zarządzana, ale używana lokalnie. – stefaanv
Powiązane [Dlaczego funkcje zmiennych warunku pthreads wymagają muteksu?] (Http://stackoverflow.com/q/2763714/2069064) – Barry
Stycznie powiązane: Możesz implementować semafory w kategoriach muteksów i zmiennych warunków dość łatwo. Zmienne warunku to tylko inny prymityw czasu oczekiwania; znacznie ułatwiają oczekiwanie na ogólne, wyrażone w kodzie użytkownika warunki. – Mark