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;
#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 ChangesSaved() noexcept; //called after saving
bool GetChangeState() noexcept;
#define CHANGES_MADE ChangesMade();
#define CHANGES_SAVED ChangesSaved();
#define GET_CHANGE_STATE GetChangeState();
#else
#define CHANGES_MADE
#define CHANGES_SAVED
#define GET_CHANGE_STATE
#endif
/**

View file

@ -3,15 +3,17 @@
#if CONSERVATIVE_DISK_SAVE
void Bank::ChangesMade() noexcept
{
while (change_flag.exchange(true, std::memory_order_relaxed))
;
std::atomic_thread_fence(std::memory_order_acquire);
return change_flag.test_and_set();
}
void Bank::ChangesSaved() noexcept
{
std::atomic_thread_fence(std::memory_order_release);
change_flag.store(false, std::memory_order_relaxed);
return change_flag.clear();
}
bool Bank::GetChangeState() noexcept
{
return change_flag.test();
}
#endif