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

为什么网站要域名微信开放平台表情包

为什么网站要域名,微信开放平台表情包,嘉兴网站建设哪家好,贵阳市乌当区住房与城乡建设局网站文章目录 互斥锁#xff1a; sync.Mutexsync.WaitGroup 计数器例子func (*WaitGroup) Addfunc (*WaitGroup) Donefunc (*WaitGroup) Wait 读写互斥锁参考资料 临界区总是需要通过同步机制进行保护的#xff0c;否则就会产生竞态条件#xff0c;导致数据不一致。 互斥锁… 文章目录 互斥锁 sync.Mutexsync.WaitGroup 计数器例子func (*WaitGroup) Addfunc (*WaitGroup) Donefunc (*WaitGroup) Wait 读写互斥锁参考资料 临界区总是需要通过同步机制进行保护的否则就会产生竞态条件导致数据不一致。 互斥锁 sync.Mutex 一个互斥锁可以被用来保护一个临界区我们可以通过它来保证在同一时刻只有一个 goroutine 处于该临界区之内同一个时刻只有一个线程能够拿到锁 先通过一个并发读写的例子演示一下当多线程同时访问全局变量时结果会怎样 package mainimport (fmt )var count intfunc main() {for i : 0; i 2; i {go func() {for i : 1000000; i 0; i-- {count}fmt.Println(count)}()}fmt.Scanf(\n) //等待子线程全部结束 }//运行结果 //1003065 //1033207修改代码在累加的地方添加互斥锁就能保证我们每次得到的结果都是想要的值 package mainimport (fmtsync )var (count intlock sync.Mutex )func main() {for i : 0; i 2; i {go func() {for i : 1000000; i 0; i-- {lock.Lock()countlock.Unlock()}fmt.Println(count)}()}fmt.Scanf(\n) //等待子线程全部结束 }// 运行结果 //1991307 //2000000每当有 goroutine 想进入临界区时都需要先对它进行锁定并且每个 goroutine 离开临界区时都要及时地对它进行解锁锁定和解锁操作分别通过互斥锁 sync.Mutex 的 Lock 和 Unlock 方法实现。使用互斥锁的时候有以下注意事项 不要重复锁定互斥锁不要忘记解锁互斥锁必要时使用 defer 语句不要对尚未锁定或者已解锁的互斥锁解锁不要在多个函数之间直接传递互斥锁。 sync.WaitGroup 计数器 type WaitGroup struct {// contains filtered or unexported fields// 包含已筛选或未导出的字段 }A WaitGroup waits for a collection of goroutines to finish. The main goroutine calls Add to set the number of goroutines to wait for. Then each of the goroutines runs and calls Done when finished. At the same time, Wait can be used to block until all goroutines have finished. WaitGroup等待goroutines的集合完成。主goroutine调用Add来设置要等待的goroutine的数量。然后每个goroutine都会运行并在完成时调用Done。同时可以使用Wait来阻止直到所有goroutine都完成。 A WaitGroup must not be copied after first use. 首次使用后不得复制WaitGroup。 In the terminology of the Go memory model, a call to Done “synchronizes before” the return of any Wait call that it unblocks. 在Go内存模型的术语中对Done的调用在其取消阻止的任何Wait调用返回之前“同步”。 例子 This example fetches several URLs concurrently, using a WaitGroup to block until all the fetches are complete. 此示例同时获取多个URL使用WaitGroup进行阻止直到所有获取完成。 package mainimport (sync )type httpPkg struct{}func (httpPkg) Get(url string) {}var http httpPkgfunc main() {var wg sync.WaitGroupvar urls []string{http://www.csdn.net/,http://www.youku.com/,http://www.baidu.com/,}for _, url : range urls {// Increment the WaitGroup counter.// 增加WaitGroup计数器。wg.Add(1)// Launch a goroutine to fetch the URL.// 启动goroutine以获取URL。go func(url string) {// Decrement the counter when the goroutine completes.// goroutine完成时递减计数器。defer wg.Done()// Fetch the URL.// 获取URL。http.Get(url)}(url)}// Wait for all HTTP fetches to complete.// 等待所有HTTP获取完成。wg.Wait() }func (*WaitGroup) Add func (wg *WaitGroup) Add(delta int)Add adds delta, which may be negative, to the WaitGroup counter. If the counter becomes zero, all goroutines blocked on Wait are released. If the counter goes negative, Add panics. Add向WaitGroup计数器添加可能为负数的delta。如果计数器变为零则会释放在Wait上阻止的所有goroutines。如果计数器为负数Add会恐慌。 Note that calls with a positive delta that occur when the counter is zero must happen before a Wait. Calls with a negative delta, or calls with a positive delta that start when the counter is greater than zero, may happen at any time. 请注意计数器为零时发生的具有正增量的调用必须在等待之前发生。任何时候都可能发生具有负增量的调用或当计数器大于零时开始的具有正增量的调用。 Typically this means the calls to Add should execute before the statement creating the goroutine or other event to be waited for. If a WaitGroup is reused to wait for several independent sets of events, new Add calls must happen after all previous Wait calls have returned. See the WaitGroup example. 通常这意味着对Add的调用应该在创建goroutine或其他待等待事件的语句之前执行。如果重用一个WaitGroup来等待多个独立的事件集则必须在所有以前的wait调用都返回后进行新的Add调用。请参阅WaitGroup示例。 func (*WaitGroup) Done func (wg *WaitGroup) Done()Done decrements the WaitGroup counter by one. Done将WaitGroup计数器递减一。 func (*WaitGroup) Wait func (wg *WaitGroup) Wait()Wait blocks until the WaitGroup counter is zero. 等待块直到WaitGroup计数器为零。 读写互斥锁 互斥锁是完全互斥的但是有很多实际的场景下是读多写少的当我们并发的去读取一个资源不涉及资源修改的时候是没有必要加锁的这种场景下使用读写锁是更好的一种选择。读写锁在Go语言中使用sync包中的RWMutex类型。 读写锁分为两种读锁和写锁。当一个goroutine获取读锁之后其他的goroutine如果是获取读锁会继续获得锁如果是获取写锁就会等待当一个goroutine获取写锁之后其他的goroutine无论是获取读锁还是写锁都会等待。 读写锁示例 package mainimport (fmtsynctime )var (x int64wg sync.WaitGrouplock sync.Mutexrwlock sync.RWMutex )func write() {// lock.Lock() // 加互斥锁rwlock.Lock() // 加写锁x x 1time.Sleep(10 * time.Millisecond) // 假设读操作耗时10毫秒rwlock.Unlock() // 解写锁// lock.Unlock() // 解互斥锁wg.Done() }func read() {// lock.Lock() // 加互斥锁rwlock.RLock() // 加读锁time.Sleep(time.Millisecond) // 假设读操作耗时1毫秒rwlock.RUnlock() // 解读锁// lock.Unlock() // 解互斥锁wg.Done() }func main() {start : time.Now()for i : 0; i 10; i {wg.Add(1)go write()}for i : 0; i 1000; i {wg.Add(1)go read()}wg.Wait()end : time.Now()fmt.Println(end.Sub(start)) }// 173.3553ms参考资料 sync包 golang并发之sync包
http://www.yutouwan.com/news/429162/

相关文章:

  • 做浏览单的网站网站咨询弹窗是怎么做的
  • 中国建筑网官方网站入口网店美工的重要性
  • 南京百度做网站电话吉林省长春市长春网站建设哪家好
  • 商丘网站制作方案工商注册公司代理
  • 怎么才能建立自己的网站啊招聘网站怎么做预算
  • 深圳哪做网站网站建设全
  • 海南做网站找谁浙江省建设厅网站在哪里
  • 做网络销售都做什么网站怎样建设自己网站的后台
  • 网站简介 title微官网和移动网站区别
  • 模板网站劣势新余网站建设人员
  • 青海网站建设策划郑州厉害的seo顾问公司
  • 蓝牙 技术支持 东莞网站建设策划书网站
  • 网站建设勹金手指下拉wordpress 性能问题
  • 百度网站加v好看的电商网站模板
  • 创建邮箱网站网页游戏中心大全
  • 广州网站优化招聘一步步教做音乐网站
  • 论坛网站开发费用设计制作生态瓶教学视频
  • 做网站哪里找程序员云服务器哪一家比较便宜
  • 军队工程建设项目招投标网站安徽省交通建设股份有限公司网站
  • 全国住房与城乡建设部网站热 网站正在建设中
  • 佛山市门户网站建设网页设计模板图片
  • 文化馆网站建设饰品销售网站功能建设
  • 甘南州合作市住房建设局网站网站开发怎么对接客户
  • 微信小程序怎么删除seo站内优化教程
  • 怎样做pdf电子书下载网站dw网页设计作品简单
  • 企业网站优化的弊端做seo必须有自己网站吗
  • 网站改版做301重定向游戏公司官方网站建设方案
  • 网站开发 ssh 菜鸟太原网站seo外包
  • 珠海集团网站建设报价apache怎么配置网站
  • 电商食品网站建设网站开发公司面试题