+#elif defined(SYS_LINUX)
+ unsigned int bit;
+ cpu_set_t p_aff;
+ memset( &p_aff, 0, sizeof(p_aff) );
+ sched_getaffinity( 0, sizeof(p_aff), &p_aff );
+ for( cpu_count = 0, bit = 0; bit < sizeof(p_aff); bit++ )
+ cpu_count += (((uint8_t *)&p_aff)[bit / 8] >> (bit % 8)) & 1;
+
+#elif defined(SYS_BEOS)
+ system_info info;
+ get_system_info( &info );
+ cpu_count = info.cpu_count;
+
+#elif defined(SYS_DARWIN) || defined(SYS_FREEBSD) || defined(SYS_OPENBSD)
+ size_t length = sizeof( cpu_count );
+#ifdef SYS_OPENBSD
+ int mib[2] = { CTL_HW, HW_NCPU };
+ if( sysctl(mib, 2, &cpu_count, &length, NULL, 0) )
+#else
+ if( sysctlbyname("hw.ncpu", &cpu_count, &length, NULL, 0) )
+#endif