| // 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 | |
| // Export for testing. | |
| var Runtime_Semacquire = runtime_Semacquire | |
| var Runtime_Semrelease = runtime_Semrelease | |
| var Runtime_procPin = runtime_procPin | |
| var Runtime_procUnpin = runtime_procUnpin | |
| // PoolDequeue exports an interface for pollDequeue testing. | |
| type PoolDequeue interface { | |
| PushHead(val any) bool | |
| PopHead() (any, bool) | |
| PopTail() (any, bool) | |
| } | |
| func NewPoolDequeue(n int) PoolDequeue { | |
| d := &poolDequeue{ | |
| vals: make([]eface, n), | |
| } | |
| // For testing purposes, set the head and tail indexes close | |
| // to wrapping around. | |
| d.headTail.Store(d.pack(1<<dequeueBits-500, 1<<dequeueBits-500)) | |
| return d | |
| } | |
| func (d *poolDequeue) PushHead(val any) bool { | |
| return d.pushHead(val) | |
| } | |
| func (d *poolDequeue) PopHead() (any, bool) { | |
| return d.popHead() | |
| } | |
| func (d *poolDequeue) PopTail() (any, bool) { | |
| return d.popTail() | |
| } | |
| func NewPoolChain() PoolDequeue { | |
| return new(poolChain) | |
| } | |
| func (c *poolChain) PushHead(val any) bool { | |
| c.pushHead(val) | |
| return true | |
| } | |
| func (c *poolChain) PopHead() (any, bool) { | |
| return c.popHead() | |
| } | |
| func (c *poolChain) PopTail() (any, bool) { | |
| return c.popTail() | |
| } | |