diff options
| author | Mel <einebeere@gmail.com> | 2024-02-15 11:18:17 +0100 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2024-02-15 11:18:17 +0100 |
| commit | 0a5e412541937ead88377cabdb565ecfe65c0afc (patch) | |
| tree | cf2daa159cf466ab50d639bdb209e8603e763138 /src/ThreadRole.hpp | |
| parent | 6a30c3e4f22de4d0f8f32107f614f597f5f39cc1 (diff) | |
| download | meowcraft-0a5e412541937ead88377cabdb565ecfe65c0afc.tar.zst meowcraft-0a5e412541937ead88377cabdb565ecfe65c0afc.zip | |
Give all threads specific thread roles and assert thread safety
Diffstat (limited to 'src/ThreadRole.hpp')
| -rw-r--r-- | src/ThreadRole.hpp | 30 |
1 files changed, 30 insertions, 0 deletions
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 |
