12345678910111213141516171819202122232425262728293031323334353637 |
- // 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 <features.h>
- #include <sched.h>
- // 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;
- }
|