Класс
std::lock_guard является оберткой мьютекса, который предоставляет удобный механизм в стиле RAII для владения мьютексом на время действия блока с областью действия. Когда объект lock_guard создан, он пытается завладеть предоставленным ему мьютексом. Когда элемент управления покидает область, в которой был создан объект lock_guard, lock_guard разрушается и мьютекс освобождается.В этом примере функция
safe_increment использует std::lock_guard для блокировки мьютекса g_i_mutex, который защищает доступ к переменной g_i. Это гарантирует, что только один поток может изменять значение g_i в любой момент времени. Когда элемент управления покидает область действия объекта lock, мьютекс автоматически освобождается.С другой стороны, функция
unsafe_increment не использует мьютекс для защиты доступа к переменной g_i, что может привести к состоянию гонки (race condition) и непредсказуемым результатам.
