代码拉取完成,页面将自动刷新
package cachepool
import (
"sync"
)
var (
//CachePool []byte 缓存池 2
CachePool = cachePool2{}
)
//Cache cache
type Cache interface {
Bytes() []byte
Free()
}
type cache struct {
isUsed bool
b []byte
}
func (c *cache) Bytes() []byte {
if !c.isUsed {
return nil
}
return c.b
}
func (c *cache) Free() {
c.isUsed = false
}
type cachePool2 struct {
pool []*cache
mu sync.Mutex
}
func (cp2 *cachePool2) Require(size int) Cache {
cp2.mu.Lock()
defer cp2.mu.Unlock()
for k := range cp2.pool {
if cp2.pool[k] == nil || cp2.pool[k].isUsed || len(cp2.pool[k].b) < size {
continue
}
cp2.pool[k].isUsed = true
return cp2.pool[k]
}
newCache := &cache{
isUsed: true,
b: make([]byte, size),
}
cp2.addCache(newCache)
return newCache
}
func (cp2 *cachePool2) addCache(newCache *cache) {
for k := range cp2.pool {
if cp2.pool[k] == nil {
cp2.pool[k] = newCache
return
}
}
cp2.pool = append(cp2.pool, newCache)
}
func (cp2 *cachePool2) DeleteNotUsed() {
cp2.mu.Lock()
defer cp2.mu.Unlock()
for k := range cp2.pool {
if cp2.pool[k] == nil {
continue
}
if !cp2.pool[k].isUsed {
cp2.pool[k] = nil
}
}
}
func (cp2 *cachePool2) DeleteAll() {
cp2.mu.Lock()
defer cp2.mu.Unlock()
for k := range cp2.pool {
cp2.pool[k] = nil
}
}
//Require 申请Cache
func Require(size int) Cache {
return CachePool.Require(size)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。