Tengo una clase a la que se accede desde varios subprocesos. Ambas funciones getter y setter están protegidas con bloqueos. ¿Realmente se necesitan los bloqueos para las funciones getter? ¿Por qué?tiene una función getter necesita un mutex?
class foo {
public:
void setCount (int count) {
boost::lock_guard<boost::mutex> lg(mutex_);
count_ = count;
}
int count() {
boost::lock_guard<boost::mutex> lg(mutex_); // mutex needed?
return count_;
}
private:
boost::mutex mutex_;
int count_;
};
No necesariamente. Leer y escribir un 'int' son probablemente operaciones atómicas. Por supuesto, esto depende de la arquitectura y no es portátil. – Dan
Exactamente: es un comportamiento indefinido. Es mejor tener la sobrecarga de un candado, a diferencia de la memoria que se corrompe. –
Por lo general, sí.Pero si tiene una necesidad demostrada de aumentar el rendimiento, es posible omitir el bloqueo. Ver mi respuesta – Dan