9#ifndef SQUID_SRC_IPC_READWRITELOCK_H
10#define SQUID_SRC_IPC_READWRITELOCK_H
20class ReadWriteLockStats;
approximate stats of a set of ReadWriteLocks
int readable
number of locks locked for reading
int idle
number of unlocked locks
int writers
sum of lock.writers
int count
the total number of locks
void dump(StoreEntry &e) const
int writeable
number of locks locked for writing
int readers
sum of lock.readers
int appenders
number of appending writers
void unlockHeaders()
undo successful lockHeaders()
std::atomic< uint32_t > readLevel
number of users reading (or trying to)
void switchExclusiveToShared()
bool lockHeaders()
lock for [readable] metadata update or return false
std::atomic< uint32_t > readers
number of reading users
void unlockExclusive()
undo successful exclusiveLock()
bool lockExclusive()
lock for modification or return false
bool stopAppendingAndRestoreExclusive()
std::atomic_flag updating
a reader is updating metadata/headers
std::atomic< uint32_t > writeLevel
number of users writing (or trying to write)
std::atomic< bool > writing
there is a writing user (there can be at most 1)
bool unlockSharedAndSwitchToExclusive()
std::atomic< bool > appending
the writer has promised to only append
void unlockShared()
undo successful sharedLock()
bool lockShared()
lock for reading or return false
void updateStats(ReadWriteLockStats &stats) const
adds approximate current stats to the supplied ones
void startAppending()
writer keeps its lock but also allows reading
void AssertFlagIsSet(std::atomic_flag &flag)
std::ostream & operator<<(std::ostream &os, const QuestionerId &qid)