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

做洗衣液的企业网站wordpress静态化

做洗衣液的企业网站,wordpress静态化,18款禁用免费观看app下载,长沙网站设计拓谋网络✍个人博客#xff1a;Pandaconda-CSDN博客 #x1f4e3;专栏地址#xff1a;http://t.csdnimg.cn/UWz06 #x1f4da;专栏简介#xff1a;在这个专栏中#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话#xff0c;欢迎点赞#x1f44d;收藏… ✍个人博客Pandaconda-CSDN博客 专栏地址http://t.csdnimg.cn/UWz06 专栏简介在这个专栏中我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话欢迎点赞收藏您的支持就是我创作的最大动力 13. Cond 中 Wait 使用 在 Go 语言中sync.Cond 类型提供了 Wait() 方法来让 Goroutine 等待条件变量。当 Goroutine 调用 Wait() 方法时它会释放已经持有的锁并阻塞在条件变量上直到另一个 Goroutine 调用 Signal() 或 Broadcast() 方法并释放锁唤醒了它。被唤醒的 Goroutine 会重新尝试获得锁然后继续执行。 下面是一个使用 sync.Cond 和 Wait() 方法的示例 package main import (fmtsynctime ) func main() {var mutex sync.Mutexcond : sync.NewCond(mutex)ready : falsego func() {time.Sleep(time.Second * 1)mutex.Lock()ready truecond.Signal()mutex.Unlock()}()mutex.Lock()for !ready {cond.Wait()}mutex.Unlock()fmt.Println(Goroutine is ready) } 在这个例子中我们首先创建了一个 sync.Mutex 实例和一个与之关联的 sync.Cond 实例。我们在一个 Goroutine 中等待 1 秒钟然后发送一个 Signal() 信号来唤醒等待条件变量的 Goroutine。在主 Goroutine 中我们首先获取了锁然后开始等待条件变量。在等待过程中Goroutine 会释放锁并阻塞在条件变量上直到另一个 Goroutine 发送了 Signal() 信号并唤醒了它。被唤醒的 Goroutine 会重新尝试获取锁并在获取到锁后输出一条消息。 需要注意的是调用 Wait() 方法之前必须先获取锁否则会出现死锁等问题。另外在使用 Wait() 方法时要确保有其他 Goroutine 会发送 Signal() 或 Broadcast() 信号否则可能会导致 Goroutine 永久阻塞。 14. WaitGroup 用法 在 Go 语言中sync.WaitGroup 类型提供了一种方便的方式来等待多个 Goroutine 完成它们的任务。WaitGroup 可以被用来跟踪一组 Goroutine等待它们完成任务并汇总结果。下面是 WaitGroup 的基本用法示例 package main import (fmtsync ) func main() {var wg sync.WaitGroupfor i : 0; i 5; i {wg.Add(1)go func(i int) {fmt.Printf(Goroutine %d\n, i)wg.Done()}(i)}wg.Wait()fmt.Println(All Goroutines are done) } 在这个示例中我们首先创建了一个 sync.WaitGroup 实例。然后在一个 for 循环中创建了 5 个 Goroutine并调用 wg.Add(1) 方法将计数器加 1表示有一个 Goroutine 需要等待。在每个 Goroutine 中我们输出了一条消息表示该 Goroutine 正在执行任务并调用 wg.Done() 方法将计数器减 1表示该 Goroutine 已经完成任务。最后我们调用 wg.Wait() 方法等待所有 Goroutine 完成任务然后输出一条消息表示所有 Goroutine 都已完成。 需要注意的是调用 Add() 方法之后必须调用 Done() 方法否则会出现死锁等问题。另外在等待所有 Goroutine 完成任务时要确保所有 Goroutine 都已经调用了 Done() 方法否则可能会导致程序永久阻塞。 WaitGroup 还提供了一个 WaitGroup.Add() 方法可以将计数器增加指定的值以便一次性添加多个需要等待的 Goroutine。另外WaitGroup 还支持嵌套使用即在一个 Goroutine 中使用 WaitGroup 等待一组 Goroutine 完成任务并在另一个 WaitGroup 中使用这个 Goroutine 作为一项任务等待其他 Goroutine 完成任务。 15. WaitGroup 实现原理 在 Go 语言中sync.WaitGroup 的实现原理非常简单它基本上是通过一个计数器来实现的。当我们调用 WaitGroup.Add(n) 方法时它会将计数器的值增加 n。当我们调用 WaitGroup.Done() 方法时它会将计数器的值减 1。而当我们调用 WaitGroup.Wait() 方法时它会阻塞等待直到计数器的值为 0。 下面是 sync.WaitGroup 的简化版实现用来更好地理解它的工作原理 type WaitGroup struct {counter int32cond *sync.Cond } func NewWaitGroup() *WaitGroup {return WaitGroup{counter: 0,cond: sync.NewCond(sync.Mutex{}),} } func (wg *WaitGroup) Add(delta int) {atomic.AddInt32(wg.counter, int32(delta)) } func (wg *WaitGroup) Done() {atomic.AddInt32(wg.counter, -1)if wg.counter 0 {wg.cond.Broadcast()} } func (wg *WaitGroup) Wait() {wg.cond.L.Lock()for wg.counter 0 {wg.cond.Wait()}wg.cond.L.Unlock() } 在这个简化版实现中我们首先创建了一个 WaitGroup 类型并将计数器初始化为 0。然后我们使用 sync.Cond 类型来实现等待和通知机制以便在调用 Wait() 方法时可以阻塞等待。 在 Add() 方法中我们使用原子操作将计数器的值增加指定的值。在 Done() 方法中我们使用原子操作将计数器的值减 1并检查计数器是否为 0。如果计数器为 0说明所有 Goroutine 都已经完成任务我们就可以使用 sync.Cond.Broadcast() 方法通知所有正在等待的 Goroutine 继续执行。 在 Wait() 方法中我们首先获取互斥锁然后在一个循环中等待计数器的值为 0。在循环中我们使用 sync.Cond.Wait() 方法释放互斥锁并等待条件变量上的通知。当计数器的值为 0 时说明所有 Goroutine 都已经完成任务我们就可以退出循环并释放互斥锁。 需要注意的是这个简化版实现并没有考虑到 WaitGroup 的嵌套使用情况并且也没有处理 WaitGroup 计数器被减为负数的情况。真正的 sync.WaitGroup 实现要比这个简化版实现复杂得多但是基本的实现原理是一样的。
http://www.hkea.cn/news/14498689/

相关文章:

  • 做公司企业网站标准尺寸网站链接分享做推广
  • 南京网站的优化哈尔滨网站建设自助建站
  • 深圳云购网站制作宿迁房产网 新楼盘
  • 江门外贸集团有限公司英文网站门头效果图制作
  • 站长工具网址是多少怎样设计一个公司网站
  • 安徽省做网站沃尔玛网上商城app官方下载
  • 二级域名网站怎么建设wordpress国内能用吗
  • 交河做网站价格福州网站建设技术支持
  • 怎么做淘宝网站的网页设计聊城质量最好网站建设
  • 户外旅游网站排名学seo优化
  • 沈阳企业自助建站企业网站建设发展历程
  • 宿州官方网站建设网站团购报名怎么做
  • 做的网站怎样适配手机屏幕怎么做自己的网站弄商城佣金
  • 官网移动迷你世界太原seo快速排名
  • 成都私人网站建设投资公司排名
  • 网站横幅广告代码深圳网络seo推广
  • 在线制作图片加文字的软件上海seo服务公司
  • 深圳网站设计哪家好编辑器
  • 上海怎么建设网站北京首都功能优化
  • 网站备案 材料莱芜网络推广
  • 电信服务器做网站网站建设优化服务报价
  • 东莞国网站建设网站正在建设升级
  • aspsql server典型网站建设案例 源码ftp搭建工具
  • 宁晋网站建设代理价格两学一做11月答题网站
  • 一起合伙做项目的网站素材网站可以做淘宝吗
  • 江桥网站建设重庆玻璃制作厂家
  • 泉州网站建设多少钱手机建网站 教程
  • 校园时空网站建设分析虚拟主机网站建设步骤
  • 购物网站建设新闻网页图片格式
  • seo网站上线前分析淘宝式网站建设