Mercurial > hg > svcore
diff base/Serialiser.h @ 1857:14c776dad920
Make Serialiser cancellable while waiting for its lock
author | Chris Cannam |
---|---|
date | Thu, 14 May 2020 16:35:39 +0100 |
parents | ad5f892c0c4d |
children |
line wrap: on
line diff
--- a/base/Serialiser.h Thu May 14 16:35:21 2020 +0100 +++ b/base/Serialiser.h Thu May 14 16:35:39 2020 +0100 @@ -20,17 +20,39 @@ #include <QMutex> #include <map> +#include <atomic> class Serialiser { public: + /** + * Construct a serialiser that takes the lock associated with the + * given id. That is, the constructor will only complete after all + * existing serialisers with the given id have been deleted. + */ Serialiser(QString id); + + /** + * Construct a cancellable serialiser that takes the lock + * associated with the given id. That is, the constructor will + * only complete when all existing serialisers with the given id + * have been deleted, or when the (occasionally polled) bool flag + * pointed to by cancelled has been found to be true. + */ + Serialiser(QString id, const std::atomic<bool> *cancelled); + + /** + * Release the lock associated with the given id (if taken, rather + * than cancelled). + */ ~Serialiser(); QString getId() const { return m_id; } protected: QString m_id; + const std::atomic<bool> *m_cancelled; + bool m_locked; static QMutex m_mapMutex; static std::map<QString, QMutex *> m_mutexMap; };