当前位置: 首页 > news >正文

怎么优化网站程序acaa网页设计师

怎么优化网站程序,acaa网页设计师,设计logo网站推荐,请写出html文档的代码go 实现可重入锁 实际上#xff0c;Go 语言标准库中的 sync.Mutex 是不可重入的。但是#xff0c;我们可以基于 sync.Mutex 实现一个可重入锁#xff08;ReentrantLock#xff09;。下面是一个简单的可重入锁的实现示例#xff1a; Go 1package main 2 3import ( 4 Go 语言标准库中的 sync.Mutex 是不可重入的。但是我们可以基于 sync.Mutex 实现一个可重入锁ReentrantLock。下面是一个简单的可重入锁的实现示例 Go 1package main 2 3import ( 4 sync 5) 6 7type ReentrantMutex struct { 8 mutex sync.Mutex 9 holder string 10 recursion int 11} 12 13func (r *ReentrantMutex) Lock() { 14 goroutineID : getGoroutineID() // 假设这是获取当前 goroutine ID 的函数 15 16 r.mutex.Lock() 17 if r.holder goroutineID { 18 r.recursion 19 } else { 20 r.holder goroutineID 21 r.recursion 1 22 } 23} 24 25func (r *ReentrantMutex) Unlock() { 26 goroutineID : getGoroutineID() 27 28 r.mutex.Lock() 29 defer r.mutex.Unlock() 30 31 if r.holder ! goroutineID { 32 panic(attempted unlock from a goroutine that does not hold the lock) 33 } 34 35 r.recursion-- 36 if r.recursion 0 { 37 r.holder 38 } 39} 40 41// 示例性的 getGoroutineID 函数实际 Go 语言中没有直接提供获取 Goroutine ID 的方法 42func getGoroutineID() string { 43 // 这里仅作为示例真实环境中需要自己实现或使用第三方库来获取 goroutine ID 44 return goroutineID // 真实情况会更复杂 45} 46 47func main() { 48 reentrantLock : ReentrantMutex{} 49 50 go func() { 51 reentrantLock.Lock() 52 fmt.Println(Goroutine A acquired the lock.) 53 reentrantLock.Lock() 54 fmt.Println(Goroutine A reacquired the lock.) 55 reentrantLock.Unlock() 56 fmt.Println(Goroutine A released one of its locks.) 57 reentrantLock.Unlock() 58 fmt.Println(Goroutine A fully released the lock.) 59 }() 60 61 // 等待上面的 goroutine 执行完成... 62} 63 上述代码定义了一个名为 ReentrantMutex 的结构体它在内部维护了一个原始的 Mutex 和一些状态变量来跟踪持有锁的 goroutine 以及该 goroutine 对锁的递归获取次数。当同一个 goroutine 请求已经持有的锁时递归计数器增加当释放锁时如果递归计数器大于 1则递减而不完全释放锁。 请注意这里的 getGoroutineID() 函数是虚构的因为在 Go 语言中并没有直接暴露 Goroutine 的唯一标识符。在实际实现中可能需要通过其他方式来追踪锁的拥有者例如通过自定义上下文或者关联特定的数据结构等。 go lru缓存 在Go语言中要实现一个LRULeast Recently Used缓存可以使用标准库或第三方库。这里展示如何使用 container/list 和 map 结合来手动实现一个简单的LRU缓存 Go 1package main 2 3import ( 4 container/list 5 fmt 6) 7 8// LRUCache 结构体定义了一个容量限制的LRU缓存 9type LRUCache struct { 10 capacity int 11 cache map[int]*list.Element 12 list *list.List 13} 14 15// CacheItem 用于存储键值对和其在链表中的位置 16type CacheItem struct { 17 key int 18 value interface{} 19} 20 21// NewLRUCache 创建一个新的LRU缓存实例 22func NewLRUCache(capacity int) *LRUCache { 23 return LRUCache{ 24 capacity: capacity, 25 cache: make(map[int]*list.Element), 26 list: list.New(), 27 } 28} 29 30// Get 方法从缓存中获取键对应的值如果存在则更新其为最近使用 31func (c *LRUCache) Get(key int) (interface{}, bool) { 32 if elem, ok : c.cache[key]; ok { 33 c.list.MoveToFront(elem) 34 return elem.Value.(*CacheItem).value, true 35 } 36 return nil, false 37} 38 39// Put 方法将键值对添加到缓存并根据容量调整缓存内容 40func (c *LRUCache) Put(key int, value interface{}) { 41 if elem, ok : c.cache[key]; ok { 42 elem.Value.(*CacheItem).value value 43 c.list.MoveToFront(elem) 44 } else { 45 if c.list.Len() c.capacity { 46 delete(c.cache, c.list.Back().Value.(*CacheItem).key) 47 c.list.Remove(c.list.Back()) 48 } 49 newElem : c.list.PushFront(CacheItem{key: key, value: value}) 50 c.cache[key] newElem 51 } 52} 53 54// 示例代码 55func main() { 56 cache : NewLRUCache(3) 57 58 cache.Put(1, one) 59 cache.Put(2, two) 60 cache.Put(3, three) 61 62 fmt.Println(cache.Get(1)) // 输出(one, true) 63 cache.Put(4, four) // 此时键为1的项因超过容量而被移除 64 fmt.Println(cache.Get(1)) // 输出(nil, false) 65 fmt.Println(cache.Get(2)) // 输出(two, true) 66 fmt.Println(cache.Get(3)) // 输出(three, true) 67 fmt.Println(cache.Get(4)) // 输出(four, true) 68} 这个实现仅作为基础示例实际应用中可能需要考虑更多边界条件以及线程安全问题。 另外Go社区有一些成熟的第三方包如 github.com/hashicorp/golang-lru它提供了更高效且易于使用的LRU缓存实现。
http://www.zqtcl.cn/news/86361/

相关文章:

  • 设计类网站建设规划书免费wordpress企业主题
  • 电子商务网站开发形式有wordpress调用文章自定义字段
  • 网站环境搭建免费自己设计装修的app
  • 大学生做网站怎么赚钱在服务器上安装wordpress
  • 做网站的怎样能翻页用vue开发的网站
  • 凡科网站做商城电商网站开发环境怎么写
  • 做网站最贵包装设计分析
  • 网站开发需要多少钱怎样微信里的小程序怎么制作方法
  • asp.net mvc 5 网站开发之美全景旅游网站项目建设
  • 云南昆明网站建设携程网网站做的怎么样
  • 新泰网站制作公司海外网站入口
  • 网站改版规则wordpress下载面板样式
  • 浅谈电子商务网站建设高性能网站建设进阶指南下载
  • 竞价在什么网站上做网站建设怎么添加背景音乐
  • 免费网站自助制作怎样建一个收费网站
  • 住房和城乡建设部网站电话上海做网站 公司 哪家好
  • 厚街做网站网站设计 北京店
  • php网站跟随导航前端开发用什么软件好
  • 西宁手机微网站建设wordpress图片插件放大
  • 龙溪网站制作wordpress 主题 新闻
  • 简单网站html模板下载学生网页网站制作软件大全
  • 黄浦专业做网站网站栏目策划书
  • 东莞家用台灯东莞网站建设钟点工
  • 和田地网站seo设计师网页设计
  • 中职商务网站建设课件网站建设 需求确认书
  • 网站建设计划 文库网站建设专有名词
  • 浙江自己如何做网站wordpress 手机客户端
  • 网站如何做关键词seowordpress评论积分
  • 如何做企业网站界面政务网站的建设原则
  • 做视频网站需要什么软件有哪些做数学的网站