2014-11-08 4 views
-3

Может ли один помогает мне понять, как заблокировать переменные в C++ в самом простом примере, делая вид, что мне нужно, чтобы зафиксировать 2 переменные в функции или нитьКак приобрести замок на C++?

+3

Вы имеете в виду следующее: http://en.cppreference.com/w/cpp/thread/lock_guard? –

+0

Вы имеете в виду взаимоисключающую блокировку типа 'std :: mutex'? – PeterT

+2

Пример в cppreference более чем достаточно, это довольно просто. –

ответ

4

Дано:

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 
} 

Это автоматически освободит замок на }.

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

+0

, это заблокирует a и b для области {}, правильно? что, если мне не нужно блокировать все переменные в этой области? – Arwa196

+0

Нет, он блокирует 'mutex'. Если вы хотите убедиться, что мьютекс заблокирован при доступе к 'a' и' b', вам придется написать обертку, как я упоминал в ответе. – rightfold

+0

Вы не можете заблокировать произвольные переменные. Вы можете блокировать только объекты, которые имеют метод 'lock' (см. [' BasicLockable'] (http://en.cppreference.com/w/cpp/concept/BasicLockable)). – rightfold