Замок должен быть выпущен при запуске кода внутри операторов IF или иначе. < /p>
i Нашел кусок кода, и я не знаю, работает ли он.
Я довольно новичок в C ++, поэтому, пожалуйста, простите меня, если это очевидный вопрос. < /p>
Пример 1
Я обнаружил, что я не могу использование может использовать это, если операторный инициатор
Код: Выделить всё
if (std::lock_guard lock(mutex); condition) {
// do something
}
< /code>
Как это будет эквивалентно, что также будет удерживать блокировку также во время выполнения блоков if или e или иначе: < /p>
{
std::lock_guard lock(mutex);
if (condition) {
// do something
}
}
< /code>
Пример 2 < /h3>
Я также нашел что -то подобное: < /p>
if (std::lock_guard(mutex); condition) {
// do something
}
Так что на самом деле этот пример не будет удерживать Замок, когда условие оценивается, а также не удерживает блокировку во время выполнения блоков if или или иначе.
Пример 3
Однако , Я также нашел этот код: < /p>
Код: Выделить всё
if (std::lock_guard{mutex}, condition) {
// do something
}
Этот код компилируется и запускается.
I подтвердил, что блокировка не удерживается во время выполнения блоков if или иначе, потому что следующее не умерло -lock: < /p>
Код: Выделить всё
if (std::lock_guard{mutex}, condition) {
std::lock_guard lock(mutex);
// do something
}
< /code>
Вопросы < /h3>
работает ли код в примере 3, как предполагалось? То есть: удерживает ли он блокировку во время оценки условий У этого типа, если инициализатор имеет имя, чтобы я мог прочитать его?
Подробнее здесь: https://stackoverflow.com/questions/794 ... ing-a-lock
Мобильная версия