| // Copyright 2024 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 sync |
| |
| import _ "unsafe" |
| |
| // defined in package runtime |
| |
| // SemacquireMutex is like Semacquire, but for profiling contended |
| // Mutexes and RWMutexes. |
| // If lifo is true, queue waiter at the head of wait queue. |
| // skipframes is the number of frames to omit during tracing, counting from |
| // runtime_SemacquireMutex's caller. |
| // The different forms of this function just tell the runtime how to present |
| // the reason for waiting in a backtrace, and is used to compute some metrics. |
| // Otherwise they're functionally identical. |
| // |
| //go:linkname runtime_SemacquireMutex |
| func runtime_SemacquireMutex(s *uint32, lifo bool, skipframes int) |
| |
| // Semrelease atomically increments *s and notifies a waiting goroutine |
| // if one is blocked in Semacquire. |
| // It is intended as a simple wakeup primitive for use by the synchronization |
| // library and should not be used directly. |
| // If handoff is true, pass count directly to the first waiter. |
| // skipframes is the number of frames to omit during tracing, counting from |
| // runtime_Semrelease's caller. |
| // |
| //go:linkname runtime_Semrelease |
| func runtime_Semrelease(s *uint32, handoff bool, skipframes int) |
| |
| // Active spinning runtime support. |
| // runtime_canSpin reports whether spinning makes sense at the moment. |
| // |
| //go:linkname runtime_canSpin |
| func runtime_canSpin(i int) bool |
| |
| // runtime_doSpin does active spinning. |
| // |
| //go:linkname runtime_doSpin |
| func runtime_doSpin() |
| |
| //go:linkname runtime_nanotime |
| func runtime_nanotime() int64 |
| |
| //go:linkname throw |
| func throw(string) |
| |
| //go:linkname fatal |
| func fatal(string) |