// 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. func runtime_SemacquireMutex(s *uint32, lifo bool) // 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. func runtime_Semrelease(s *uint32, handoff bool) // 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 returns true is spinning makes sense at the moment. func runtime_canSpin(i int) bool // runtime_doSpin does active spinning. func runtime_doSpin() func runtime_nanotime() int64