Ответ 1
На странице, на которую вы ссылаетесь, "mutex" - это фактический примитив синхронизации низкого уровня. Вы можете принять мьютекс, а затем отпустить его, и только один поток может взять его в любой момент (следовательно, это примитив синхронизации). Рекурсивный мьютекс - это тот, который может быть взят одним и тем же потоком несколько раз, а затем он должен быть выпущен столько раз одним и тем же потоком, прежде чем другие смогут его принять.
"Блокировка" здесь - это просто класс оболочки С++, который принимает мьютекс в своем конструкторе и выпускает его в деструкторе. Это полезно для установки синхронизации для областей С++.
Переменная состояния - это более продвинутая/высокоуровневая форма синхронизирующего примитива, которая объединяет блокировку с механизмом "сигнализации". Он используется, когда потоки должны ждать, пока ресурс станет доступным. Поток может "ждать" на CV, а затем производитель ресурсов может "сигнализировать" эту переменную, и в этом случае потоки, ожидающие резюме, получат уведомление и могут продолжить выполнение. Мьютекс сочетается с CV, чтобы избежать состояния гонки, когда нить начинает ждать на CV, в то время как другой поток хочет сигнализировать об этом; то он не контролируется, будет ли сигнал доставлен или потерян.