std::lock_guard и return
От: ikseek Украина  
Дата: 27.11.13 08:13
Оценка:
Уважаемые, подскажите, ежели есть вот такой код


class Multithreaded {
public:
  Multithreaded(): val_(0) {}

  int getVal() {
    std::lock_guard<std::mutex> lock(val_mutex_);
    return val_; // будет ли скопировано значение в вызывающую функцию раньше, чем разрушен lock?
  }

  void setVal(int new_val) {
    std::lock_guard<std::mutex> lock(val_mutex_);
    val_ = new_val;
  }
  
private:
  int val_;
  std::mutex val_mutex_;
}


Если так, улучшит ли ситуацию объявление val_ как volatile int val?
Поможет ли создание временной переменной на стеке getVal, т.е. int tmpval = val_; return tmpval;
Гарантирует ли код вроде
int getVal() {
  int res;
  {
    std::lock_guard<std::mutex> lock(val_mutex_);
    res = val_;
  }
  return res;
}

Что res будет содержать копию val_ после разрушения lock_guard?
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.