// Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. #include #include // CPU_COUNT is only provided by glibc 2.6 or higher #ifndef CPU_COUNT #define CPU_COUNT(set) _CPU_COUNT((unsigned int *)(set), sizeof(*(set))/sizeof(unsigned int)) static int _CPU_COUNT(unsigned int *set, size_t len) { int cnt; cnt = 0; while (len--) cnt += __builtin_popcount(*set++); return cnt; } #endif #include "runtime.h" #include "defs.h" int32 getproccount(void) { cpu_set_t set; int32 r, cnt; cnt = 0; r = sched_getaffinity(0, sizeof(set), &set); if(r == 0) cnt += CPU_COUNT(&set); return cnt ? cnt : 1; }