mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
35 lines
715 B
C++
35 lines
715 B
C++
#pragma once
|
|
|
|
#include <cassert>
|
|
#include <mutex>
|
|
#include <optional>
|
|
#include <thread>
|
|
|
|
namespace chatterino {
|
|
|
|
// Debug-class which asserts if guard of the same object has been called from different threads
|
|
struct ThreadGuard {
|
|
#ifndef NDEBUG
|
|
mutable std::mutex mutex;
|
|
mutable std::optional<std::thread::id> threadID;
|
|
#endif
|
|
|
|
inline void guard() const
|
|
{
|
|
#ifndef NDEBUG
|
|
std::unique_lock lock(this->mutex);
|
|
|
|
auto currentThreadID = std::this_thread::get_id();
|
|
|
|
if (!this->threadID.has_value())
|
|
{
|
|
this->threadID = currentThreadID;
|
|
return;
|
|
}
|
|
|
|
assert(this->threadID == currentThreadID);
|
|
#endif
|
|
}
|
|
};
|
|
|
|
} // namespace chatterino
|