31 lines
859 B
C
31 lines
859 B
C
#include "sn_target.h"
|
|
#include "StgSharpNative.h"
|
|
|
|
#if SN_IS_OS(SN_OS_LINUX)
|
|
#define _GNU_SOURCE
|
|
#include <pthread.h>
|
|
#include <sched.h>
|
|
#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
|
|
} |