8#include "architecture.hpp"
9#if TT_OPERATING_SYSTEM == TT_OS_WINDOWS
27void set_thread_name(std::string_view name);
29#if TT_OPERATING_SYSTEM == TT_OS_WINDOWS
30constexpr size_t maximum_num_cpus = 64;
31#elif TT_OPERATING_SYSTEM == TT_OS_LINUX || TT_OPERATING_SYSTEM == TT_OS_MACOS
32constexpr size_t maximum_num_cpus = CPU_SETSIZE;
35#if TT_OPERATING_SYSTEM == TT_OS_WINDOWS
36using thread_id = uint32_t;
38using thread_id = uint64_t;
41inline thread_local thread_id current_thread_id_dummy = 0;
47[[nodiscard]]
inline thread_id current_thread_id() noexcept
49#if TT_OPERATING_SYSTEM == TT_OS_WINDOWS
51 constexpr uint64_t NT_TIB_CurrentThreadID = 0x48;
52 return __readgsdword(NT_TIB_CurrentThreadID);
55 return reinterpret_cast<uint64_t
>(¤t_thread_id_dummy);
61[[nodiscard]]
bool is_gui_thread() noexcept;
67void run_on_gui_thread(
std::function<
void()> function) noexcept;
74[[nodiscard]]
std::vector<
bool> process_affinity_mask() noexcept;
85std::vector<
bool> set_thread_affinity_mask(
std::vector<
bool> const &mask);
96std::vector<
bool> set_thread_affinity(
size_t cpu_id);
107size_t advance_thread_affinity(
size_t &cpu) noexcept;
113[[nodiscard]]
size_t current_cpu_id() noexcept;