#include "sn_target.h" #include "StgSharpNative.h" #if SN_IS_OS(SN_OS_LINUX) #define _GNU_SOURCE #include #include #endif /* Pin the calling thread to a single logical processor. * core_id: zero-based logical processor index. * Silently ignored if core_id is out of range or the OS call fails. */ SN_API void SN_DECL sn_set_thread_affinity(int core_id) { if (core_id < 0) return; #if SN_IS_OS(SN_OS_WINDOWS) /* windows.h already included via sn_internal.h */ if (core_id >= 64) return; DWORD_PTR mask = (DWORD_PTR)1 << core_id; SetThreadAffinityMask(GetCurrentThread(), mask); #elif SN_IS_OS(SN_OS_LINUX) cpu_set_t set; CPU_ZERO(&set); CPU_SET(core_id, &set); pthread_setaffinity_np(pthread_self(), sizeof(set), &set); #endif }