atomic flag

This commit is contained in:
EntireTwix 2021-06-23 17:17:13 -07:00
parent 9c426223e9
commit 2ea4d93c10
2 changed files with 12 additions and 7 deletions

View file

@ -20,16 +20,19 @@ private:
users; users;
#if CONSERVATIVE_DISK_SAVE #if CONSERVATIVE_DISK_SAVE
std::atomic<bool> change_flag = false; //if true changes have been made std::atomic_flag change_flag = ATOMIC_FLAG_INIT; //if true changes have been made
void ChangesMade() noexcept; //called after making changes void ChangesMade() noexcept; //called after making changes
void ChangesSaved() noexcept; //called after saving void ChangesSaved() noexcept; //called after saving
bool GetChangeState() noexcept;
#define CHANGES_MADE ChangesMade(); #define CHANGES_MADE ChangesMade();
#define CHANGES_SAVED ChangesSaved(); #define CHANGES_SAVED ChangesSaved();
#define GET_CHANGE_STATE GetChangeState();
#else #else
#define CHANGES_MADE #define CHANGES_MADE
#define CHANGES_SAVED #define CHANGES_SAVED
#define GET_CHANGE_STATE
#endif #endif
/** /**

View file

@ -3,21 +3,23 @@
#if CONSERVATIVE_DISK_SAVE #if CONSERVATIVE_DISK_SAVE
void Bank::ChangesMade() noexcept void Bank::ChangesMade() noexcept
{ {
while (change_flag.exchange(true, std::memory_order_relaxed)) return change_flag.test_and_set();
;
std::atomic_thread_fence(std::memory_order_acquire);
} }
void Bank::ChangesSaved() noexcept void Bank::ChangesSaved() noexcept
{ {
std::atomic_thread_fence(std::memory_order_release); return change_flag.clear();
change_flag.store(false, std::memory_order_relaxed); }
bool Bank::GetChangeState() noexcept
{
return change_flag.test();
} }
#endif #endif
int_fast8_t Bank::AddUser(const std::string &name, const std::string &init_pass) noexcept int_fast8_t Bank::AddUser(const std::string &name, const std::string &init_pass) noexcept
{ {
if (name.size() > max_name_size) if (name.size() > max_name _size)
{ {
return ErrorResponse::NameTooLong; return ErrorResponse::NameTooLong;
} }