Ich habe eine Klasse, auf die aus mehreren Threads zugegriffen wird. Sowohl die Getter- als auch die Setter-Funktion sind mit Sperren geschützt. Werden die Sperren für Getterfunktionen benötigt? Warum?benötigt eine Getterfunktion einen 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_;
};
Nicht unbedingt. Das Lesen und Schreiben eines 'int' sind wahrscheinlich atomare Operationen. Natürlich ist dies architekturabhängig und nicht portabel. – Dan
Genau - es ist undefiniertes Verhalten. Es ist besser, den Minutenaufwand einer Sperre zu haben, als wenn der Speicher beschädigt wäre. –
Normalerweise, ja.Wenn Sie jedoch die Leistung nachweislich steigern möchten, ist es möglicherweise möglich, die Sperre zu überspringen. Siehe meine Antwort. – Dan