zoukankan      html  css  js  c++  java
  • 10.2 创建并发访问 Creating map for concurrent access

    创建并发访问映射
    原始的地图在Golang应被视为不安全的并发访问。在前面的方法中,我们描述了如何使用互斥来同步对资源的访问,这也可以利用对图元的访问。但是GO标准库还提供了为并发访问而设计的映射结构。这个食谱将说明如何使用它。
    
    
    
    package main
    
    import (
    	"fmt"
    	"sync"
    )
    
    var names = []string{"Alan", "Joe", "Jack", "Ben",
    	"Ellen", "Lisa", "Carl", "Steve", "Anton", "Yo"}
    
    func main() {
    
    	m := sync.Map{}
    	wg := sync.WaitGroup{}
    	wg.Add(10)
    	for i := 0; i < 10; i++ {
    		go func(idx int) {
    			m.Store(fmt.Sprintf("%d", idx), names[idx])
    			wg.Done()
    		}(i)
    	}
    	wg.Wait()
    
    	v, ok := m.Load("1")
    	if ok {
    		fmt.Printf("For Load key: 1 got %v
    ", v)
    	}
    
    	v, ok = m.LoadOrStore("11", "Tim")
    	if !ok {
    		fmt.Printf("Key 11 missing stored val: %v
    ", v)
    	}
    
    	m.Range(func(k, v interface{}) bool {
    		key, _ := k.(string)
    		t, _ := v.(string)
    		fmt.Printf("For index %v got %v
    ", key, t)
    		return true
    	})
    
    }
    
    /*
    For Load key: 1 got Joe
    Key 11 missing stored val: Tim
    For index 5 got Lisa
    For index 3 got Ben
    For index 0 got Alan
    For index 1 got Joe
    For index 11 got Tim
    For index 9 got Yo
    For index 7 got Steve
    For index 4 got Ellen
    For index 8 got Anton
    For index 2 got Jack
    For index 6 got Carl
    
    */
    
    
    包同步,包含结构图,该结构图设计为同时从多个GO例程中使用。map结构及其方法模拟了图元的行为。存储方法相当于m(键= =)语句。加载方法等于K,OK = m(键)和范围方法提供迭代遍历地图的能力。请注意,范围函数与map的当前状态协同工作,因此如果在运行范围方法中更改值,则反映了更改,但前提是尚未访问密钥。范围函数只访问它的键一次。
    
  • 相关阅读:
    COLLABNET 在中文语言下无法编辑用户信息.
    安装ramdisk有可能使xp3389不能用
    关于23种设计模式的有趣见解
    成绩统计分析系统规划
    编程用开源软件或者免费软件
    ROS设置大全
    禁用TextBox自动填充autocomplete=false
    CollabNet Subversion Server安装与配置
    DbEntry查询表的使用
    BugTracker.Net设置问题
  • 原文地址:https://www.cnblogs.com/zrdpy/p/8655045.html
Copyright © 2011-2022 走看看