Commit 77998ef4 authored by's avatar
Browse files

Implement setThreadAffinity for Mac OS X (from 10.5)

parent c14119ce
......@@ -35,6 +35,10 @@
#include <unistd.h>
#if defined(darwin_HOST_OS)
#include <mach/mach.h>
* This (allegedly) OS threads independent layer was initially
* abstracted away from code that used Pthreads, so the functions
......@@ -206,13 +210,13 @@ getNumberOfProcessors (void)
return nproc;
#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETAFFINITY)
// Schedules the thread to run on CPU n of m. m may be less than the
// number of physical CPUs, in which case, the thread will be allowed
// to run on CPU n, n+m, n+2m etc.
setThreadAffinity (nat n, nat m)
#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_SETAFFINITY)
nat nproc;
cpu_set_t cs;
nat i;
......@@ -223,9 +227,30 @@ setThreadAffinity (nat n, nat m)
CPU_SET(n, &cs);
sched_setaffinity(0, sizeof(cpu_set_t), &cs);
#elif defined(darwin_HOST_OS) && defined(THREAD_AFFINITY_POLICY)
// Schedules the current thread in the affinity set identified by tag n.
setThreadAffinity (nat n, nat m GNUC3_ATTRIBUTE(__unused__))
thread_affinity_policy_data_t policy;
policy.affinity_tag = n;
(thread_policy_t) &policy,
setThreadAffinity (nat n GNUC3_ATTRIBUTE(__unused__),
nat m GNUC3_ATTRIBUTE(__unused__))
#else /* !defined(THREADED_RTS) */
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment