1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
8 "runtime/internal/atomic"
12 // GOMAXPROCS sets the maximum number of CPUs that can be executing
13 // simultaneously and returns the previous setting. If n < 1, it does not
14 // change the current setting.
15 // The number of logical CPUs on the local machine can be queried with NumCPU.
16 // This call will go away when the scheduler improves.
17 func GOMAXPROCS(n
int) int {
19 ret
:= int(gomaxprocs
)
21 if n
<= 0 || n
== ret
{
25 stopTheWorld("GOMAXPROCS")
27 // newprocs will be processed by startTheWorld
34 // NumCPU returns the number of logical CPUs usable by the current process.
36 // The set of available CPUs is checked by querying the operating system
37 // at process startup. Changes to operating system CPU allocation after
38 // process startup are not reflected.
43 // NumCgoCall returns the number of cgo calls made by the current process.
44 func NumCgoCall() int64 {
46 for mp
:= (*m
)(atomic
.Loadp(unsafe
.Pointer(&allm
))); mp
!= nil; mp
= mp
.alllink
{
47 n
+= int64(mp
.ncgocall
)
52 // NumGoroutine returns the number of goroutines that currently exist.
53 func NumGoroutine() int {
54 waitForSystemGoroutines()
58 // Get field tracking information. Only fields with a tag go:"track"
59 // are tracked. This function will add every such field that is
60 // referenced to the map. The keys in the map will be
61 // PkgPath.Name.FieldName. The value will be true for each field
63 func Fieldtrack(map[string]bool)