int getVal() {
this->_mutex.lock();
int result = this->_val;
this->_mutex.unlock();
return result;
}
Что именно вы надеетесь достичь с помощью этого?Конечно, вы остановили изменение this->_val
перед сохранением в result
, но оно все еще может измениться до того, как будет возвращен результат - или между возвратом и назначением тому, что вы ему присвоили - или микросекунду позже.Независимо от того, что вы делаете, вы просто получите снимок движущейся цели.Смирись с этим.
void setVal(int val)
{
this->_mutex.lock();
this->_val = val;
this->_mutex.unlock();
}
Точно так же, что это тебе покупает?Если вы вызываете setVal(-5)
и setVal(17)
из разных потоков одновременно, какое значение должно быть после завершения обоих?У вас возникли проблемы с тем, чтобы убедиться, что первым запустится и первым закончится, но как это поможет получить «правильное» значение?