template <MEMFLAGS F> inlinevoid BasicHashtable<F>::initialize(int table_size, int entry_size, int number_of_entries) { // Called on startup, no locking needed
_table_size = table_size;
_entry_size = entry_size;
_number_of_entries = number_of_entries;
}
// The following method is MT-safe and may be used with caution. template <MEMFLAGS F> inline BasicHashtableEntry<F>* BasicHashtable<F>::bucket(int i) const { return _buckets[i].get_entry();
}
template <MEMFLAGS F> inlinevoid HashtableBucket<F>::set_entry(BasicHashtableEntry<F>* l) { // Warning: Preserve store ordering. The PackageEntryTable, ModuleEntryTable and // SystemDictionary are read without locks. The new entry must be // complete before other threads can be allowed to see it // via a store to _buckets[index].
Atomic::release_store(&_entry, l);
}
template <MEMFLAGS F> inline BasicHashtableEntry<F>* HashtableBucket<F>::get_entry() const { // Warning: Preserve load ordering. The PackageEntryTable, ModuleEntryTable and // SystemDictionary are read without locks. The new entry must be // complete before other threads can be allowed to see it // via a store to _buckets[index]. return Atomic::load_acquire(&_entry);
}
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.