|  | // 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. | 
|  |  | 
|  | package sync | 
|  |  | 
|  | import "unsafe" | 
|  |  | 
|  | // defined in package runtime | 
|  |  | 
|  | // Semacquire waits until *s > 0 and then atomically decrements it. | 
|  | // It is intended as a simple sleep primitive for use by the synchronization | 
|  | // library and should not be used directly. | 
|  | func runtime_Semacquire(s *uint32) | 
|  |  | 
|  | // SemacquireMutex is like Semacquire, but for profiling contended Mutexes. | 
|  | // 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. | 
|  | 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. | 
|  | func runtime_Semrelease(s *uint32, handoff bool, skipframes int) | 
|  |  | 
|  | // Approximation of notifyList in runtime/sema.go. Size and alignment must | 
|  | // agree. | 
|  | type notifyList struct { | 
|  | wait   uint32 | 
|  | notify uint32 | 
|  | lock   uintptr | 
|  | head   unsafe.Pointer | 
|  | tail   unsafe.Pointer | 
|  | } | 
|  |  | 
|  | // See runtime/sema.go for documentation. | 
|  | func runtime_notifyListAdd(l *notifyList) uint32 | 
|  |  | 
|  | // See runtime/sema.go for documentation. | 
|  | func runtime_notifyListWait(l *notifyList, t uint32) | 
|  |  | 
|  | // See runtime/sema.go for documentation. | 
|  | func runtime_notifyListNotifyAll(l *notifyList) | 
|  |  | 
|  | // See runtime/sema.go for documentation. | 
|  | func runtime_notifyListNotifyOne(l *notifyList) | 
|  |  | 
|  | // Ensure that sync and runtime agree on size of notifyList. | 
|  | func runtime_notifyListCheck(size uintptr) | 
|  | func init() { | 
|  | var n notifyList | 
|  | runtime_notifyListCheck(unsafe.Sizeof(n)) | 
|  | } | 
|  |  | 
|  | // Active spinning runtime support. | 
|  | // runtime_canSpin reports whether spinning makes sense at the moment. | 
|  | func runtime_canSpin(i int) bool | 
|  |  | 
|  | // runtime_doSpin does active spinning. | 
|  | func runtime_doSpin() | 
|  |  | 
|  | func runtime_nanotime() int64 |