/* This is an atomic integer abstract data type, for high-performance trackingofasinglestat.Itintentionallypermitsinconsistent atomicoperationsandreads,forbetterperformance.Thismeans that,thoughnodatashouldeverbelostbythisstat,readsofit atanytimemaynotincludeallchangesuptoanyparticularpoint.
template < typename TYPE > class atomic_stat { public: // Initialize value to the default for the type
atomic_stat() : value_(TYPE()) {};
// This enforces a strict order, as all absolute sets should void clear() {
value_.store(TYPE(), std::memory_order_seq_cst);
};
// Reads can get any valid value, it doesn't matter which, exactly
TYPE load() const { return value_.load(std::memory_order_relaxed);
};
// This only supplies relative arithmetic operations // These are all done atomically, and so can show up in any order void inc(const TYPE &other) {
value_.fetch_add(other, std::memory_order_relaxed);
};
void dec(const TYPE &other) {
value_.fetch_sub(other, std::memory_order_relaxed);
};
// This will make one attempt to set the value to the max of // the current value, and the passed-in value. It can fail // for any reason, and we only try it once. void set_max_maybe(const TYPE &new_val) {
TYPE old_val = value_; if (new_val > old_val) {
value_.compare_exchange_weak(old_val, new_val,
std::memory_order_relaxed,
std::memory_order_relaxed);
}
};
// This will make one attempt to assign the value to the passed-in // value. It can fail for any reason, and we only try it once. void set_maybe(const TYPE &new_val) {
TYPE old_val = value_;
value_.compare_exchange_weak(old_val, new_val,
std::memory_order_relaxed,
std::memory_order_relaxed);
};
private:
std::atomic<TYPE> value_;
};
#endif// _atomic_stat_h_
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.