Разница между инициализаторами оператора, принимая замокC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Разница между инициализаторами оператора, принимая замок

Сообщение Anonymous »

Мне нужно получить блокировку только во время оценки условия оператора if.
Замок должен быть выпущен при запуске кода внутри операторов 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
}
Это определенно не работать. Он создаст блокировку, а затем напрямую отдать его (и освободить блокировку), поскольку lock_guard не хранится в переменной.
Так что на самом деле этот пример не будет удерживать Замок, когда условие оценивается, а также не удерживает блокировку во время выполнения блоков if или или иначе.
Пример 3
Однако , Я также нашел этот код: < /p>

Код: Выделить всё

if (std::lock_guard{mutex}, condition) {
// do something
}
Обратите внимание, что вместо a; есть, , а также отличаются скобки, {} вместо () . < /em> < /p>
Этот код компилируется и запускается.
I подтвердил, что блокировка не удерживается во время выполнения блоков if или иначе, потому что следующее не умерло -lock: < /p>

Код: Выделить всё

if (std::lock_guard{mutex}, condition) {
std::lock_guard lock(mutex);
// do something
}
< /code>
 Вопросы < /h3>
работает ли код в примере 3, как предполагалось? То есть: удерживает ли он блокировку во время оценки условий 
? Я не могу выяснить, действительно ли эта линия работает. Я боюсь, что это может быть похоже на пример 2.
У этого типа, если инициализатор имеет имя, чтобы я мог прочитать его?

Подробнее здесь: https://stackoverflow.com/questions/794 ... ing-a-lock
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»