Может ли один помогает мне понять, как заблокировать переменные в C++ в самом простом примере, делая вид, что мне нужно, чтобы зафиксировать 2 переменные в функции или нитьКак приобрести замок на C++?
ответ
Дано:
int a;
int b;
std::mutex mutex;
Просто сделать:
{
std::lock_guard<decltype(mutex)> lock(mutex);
++a; // or whatever you wanna do to a
b += a; // or whatever you wanna do to b
}
Это автоматически освободит замок на }
.
Если вы хотите убедиться, что блокировка получена перед доступом к переменным, о которых идет речь, вам придется написать обертку.
, это заблокирует a и b для области {}, правильно? что, если мне не нужно блокировать все переменные в этой области? – Arwa196
Нет, он блокирует 'mutex'. Если вы хотите убедиться, что мьютекс заблокирован при доступе к 'a' и' b', вам придется написать обертку, как я упоминал в ответе. – rightfold
Вы не можете заблокировать произвольные переменные. Вы можете блокировать только объекты, которые имеют метод 'lock' (см. [' BasicLockable'] (http://en.cppreference.com/w/cpp/concept/BasicLockable)). – rightfold
Вы имеете в виду следующее: http://en.cppreference.com/w/cpp/thread/lock_guard? –
Вы имеете в виду взаимоисключающую блокировку типа 'std :: mutex'? – PeterT
Пример в cppreference более чем достаточно, это довольно просто. –