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")
    }
    

      

  • 相关阅读:
    显示AVI的第一桢
    视频采集,存成avi
    视频捕获
    如何将Wav文件做到EXE文件里
    图形整体拉出效果
    3.2 指数型生成函数
    3.1 普通型生成函数
    诡异的楼梯 HDU
    A strange lift HDU
    胜利大逃亡 HDU
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12771305.html
Copyright © 2011-2022 走看看