carb::thread::setAffinity
Defined in carb/thread/Util.h
-
inline bool carb::thread::setAffinity(NativeHandleType h, const CpuMaskVector &masks)
Sets the CPU Affinity for the thread.
On Windows each entry in the CpuMaskVector represents a Processor Group. Each thread can only belong to a single Processor Group, so this function will only set the CPU Affinity to the first non-zero entry in the provided CpuMaskVector. That is to say, if both
masks
[0] andmasks
[1] both have bits sets, only the CPUs inmasks
[0] will be set for the affinity.On Linux, the CpuMaskVector is analogous to a cpu_set_t. There are no restrictions on the number of CPUs that the affinity mask can contain.
Note
On Mac OS, the CPU affinity works differently than on other systems. The mask is treated as a unique ID for groups of threads that should run on cores that share L2 cache, rather than specific CPUs. For single CPU masks, this will function somewhat similarly to other systems, but threads won’t be pinned to a specific core.
- Parameters
h – The thread to set CPU Affinity for.
masks – Affinity masks to set.
- Returns
True if the function succeeded, false otherwise. If
masks
is empty, or has no bits set, false will be returned. If the underlying function for setting affinity failed, thenerrno
orlast-error
will be set.