zoukankan      html  css  js  c++  java
  • Go语言协程并发---读写锁sync.RWMutex

    package main
    
    import (
    	"fmt"
    	"sync"
    	"time"
    )
    
    /*
    读写锁
    多路只读
    一路只写
    读写互斥
    */
    
    /*读写锁API介绍*/
    func main101() {
    	var rwm sync.RWMutex
    
    	//锁定为写模式---一路只写
    	rwm.Lock()
    	//解锁写模式
    	rwm.Unlock()
    
    	//锁定为读模式---多路只读
    	rwm.RLock()
    	//释放读写锁
    	rwm.RUnlock()
    }
    
    
    /*
    数据库一写多度
    ·Read方法设定为多路只读
    ·Write方法设定为单路只写
    ·创建5读5写10条协程,观察读写锁效果
    */
    func main() {
    	var wg sync.WaitGroup
    
    	//声明读写锁
    	var rwm sync.RWMutex
    
    	for i := 0; i < 5; i++ {
    		wg.Add(1)
    		go func() {
    			//锁定为只读模式,运行多个协程同时抢到读锁
    			rwm.RLock()
    			fmt.Println("读取数据库")
    			<-time.After(3*time.Second)
    
    			//解读锁
    			rwm.RUnlock()
    			wg.Done()
    		}()
    
    		wg.Add(1)
    		go func() {
    			//锁定为写模式,只运行一个协程抢到写锁
    			rwm.Lock()
    			fmt.Println("写入数据库")
    			<-time.After(3*time.Second)
    
    			//解锁
    			rwm.Unlock()
    			wg.Done()
    		}()
    	}
    
    	wg.Wait()
    	fmt.Println("main over")
    }
    

      

  • 相关阅读:
    IDOC练习(一、发送端配置)
    节约性能的一个sql
    获取用户IP地址及用户名
    获取一个结构的所有字段
    获取文件名称的两个函数
    时间戳
    SMOD和CMOD
    内表生成XML简单实例
    ABAP&nbsp;编辑器设置(主动…
    ABAP常用Function
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12771305.html
Copyright © 2011-2022 走看看