12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // Copyright 2009 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.
- package runtime
- var ticks struct {
- lock mutex
- val uint64
- }
- var tls0 [8]uintptr // available storage for m0's TLS; not necessarily used; opaque to GC
- // Note: Called by runtime/pprof in addition to runtime code.
- func tickspersecond() int64 {
- r := int64(atomicload64(&ticks.val))
- if r != 0 {
- return r
- }
- lock(&ticks.lock)
- r = int64(ticks.val)
- if r == 0 {
- t0 := nanotime()
- c0 := cputicks()
- usleep(100 * 1000)
- t1 := nanotime()
- c1 := cputicks()
- if t1 == t0 {
- t1++
- }
- r = (c1 - c0) * 1000 * 1000 * 1000 / (t1 - t0)
- if r == 0 {
- r++
- }
- atomicstore64(&ticks.val, uint64(r))
- }
- unlock(&ticks.lock)
- return r
- }
- func makeStringSlice(n int) []string {
- return make([]string, n)
- }
- // TODO: Move to parfor.go when parfor.c becomes parfor.go.
- func parforalloc(nthrmax uint32) *parfor {
- return &parfor{
- thr: &make([]parforthread, nthrmax)[0],
- nthrmax: nthrmax,
- }
- }
- var envs []string
- var argslice []string
- // called from syscall
- func runtime_envs() []string { return envs }
- // called from os
- func runtime_args() []string { return argslice }
|