47 lines · 1.4 KB · Go
RawDownload
// 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) // 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.func runtime_Semrelease(s *uint32) // Approximation of syncSema in runtime/sema.go.type syncSema struct {	lock uintptr	head unsafe.Pointer	tail unsafe.Pointer} // Syncsemacquire waits for a pairing Syncsemrelease on the same semaphore s.func runtime_Syncsemacquire(s *syncSema) // Syncsemrelease waits for n pairing Syncsemacquire on the same semaphore s.func runtime_Syncsemrelease(s *syncSema, n uint32) // Ensure that sync and runtime agree on size of syncSema.func runtime_Syncsemcheck(size uintptr)func init() {	var s syncSema	runtime_Syncsemcheck(unsafe.Sizeof(s))} // 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()