From 0a5e412541937ead88377cabdb565ecfe65c0afc Mon Sep 17 00:00:00 2001 From: Mel Date: Thu, 15 Feb 2024 11:18:17 +0100 Subject: Give all threads specific thread roles and assert thread safety --- src/ThreadRole.hpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/ThreadRole.hpp (limited to 'src/ThreadRole.hpp') diff --git a/src/ThreadRole.hpp b/src/ThreadRole.hpp new file mode 100644 index 0000000..4c668e5 --- /dev/null +++ b/src/ThreadRole.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "Common/Assert.hpp" + +namespace MC { + +enum class ThreadRole { + None, + Logic, + Render, + Worker +}; + +// Hide the global from direct access +namespace ThreadRoleDetail { + thread_local inline ThreadRole g_thread_role = ThreadRole::None; +} + +#define THREAD_ROLE (MC::ThreadRoleDetail::g_thread_role) + +#define HELLO_I_AM(role) do { \ + ASSERT(THREAD_ROLE == MC::ThreadRole::None, "Thread role already set"); \ + THREAD_ROLE = (role); \ +} while (0) + +#define ASSERT_MAIN_THREAD() ASSERT(THREAD_ROLE == MC::ThreadRole::Logic, "Thread is not main") +#define ASSERT_THREAD_IS(role) ASSERT(THREAD_ROLE == (role), "Thread role mismatch") +#define ASSERT_THREAD_IS_NOT(role) ASSERT(THREAD_ROLE != (role), "Thread role mismatch") + +} \ No newline at end of file -- cgit 1.4.1