У меня есть пример с мьютексом. CurrentValue
- член Class
Возвращаемое значение от Mutex
int Class::NextValue()
{
mutex.lock();
++CurrentValue;
++CurrentValue;
int localValue = CurrentValue;
mutex.unlock();
return localValue;
}
Я не понимаю, почему используется localValue
. Следующий код не будет работать должным образом?
...
mutex.unlock();
return CurrentValue;
В случае, когда return
не атомное CurrentValue
может изменяться во время конструктора копирования. Но в первом примере кода может быть то же самое с localValue
?
Но 'localValue' может измениться и между разблокировкой и возвратом? Да, я знаю о стражах. Спасибо – 2013-04-19 09:56:39
@PulsatingAmbience 'localValue' является локальным для функции, поэтому, если другой поток вызывает' NextValue', он увидит другое 'localValue'. Таким образом, нет условий гонки. – juanchopanza
Это означает, что есть отдельный стек вызовов для каждой темы? – 2013-04-19 10:30:53