zoukankan      html  css  js  c++  java
  • golang读写锁

    golang读写锁,其特征在于

    1. 读锁:可以同时进行多个协程读操作,不允许写操作
    2. 写锁:只允许同时有一个协程进行写操作,不允许其他写操作和读操作

    读写锁共有四个方法

    1. RLock:获取读锁
    2. RUnLock:释放读锁
    3. Lock:获取写锁
    4. UnLock:释放写锁

    使用例子如下

    package main
    
    import (
        "fmt"
        "sync"
        "time"
    )
    
    var gRWLock *sync.RWMutex
    
    var gVar int
    
    func init() {
        gRWLock = new(sync.RWMutex)
        gVar = 1
    }
    
    func main() {
        var wg sync.WaitGroup
        go Read(1, &wg)
        wg.Add(1)
        go Write(1, &wg)
        wg.Add(1)
        go Read(2, &wg)
        wg.Add(1)
        go Read(3, &wg)
        wg.Add(1)
    
        wg.Wait()
    }
    
    func Read(id int, wg *sync.WaitGroup) {
        fmt.Printf("Read Coroutine: %d start
    ", id)
        defer fmt.Printf("Read Coroutine: %d end
    ", id)
        gRWLock.RLock()
        fmt.Printf("gVar %d
    ", gVar)
        time.Sleep(time.Second)
        gRWLock.RUnlock()
    
        wg.Done()
    
    }
    
    func Write(id int, wg *sync.WaitGroup) {
        fmt.Printf("Write Coroutine: %d start
    ", id)
        defer fmt.Printf("Write Coroutine: %d end
    ", id)
        gRWLock.Lock()
        gVar = gVar + 100
        fmt.Printf("gVar %d
    ", gVar)
        time.Sleep(time.Second)
        gRWLock.Unlock()
        wg.Done()
    
    }
  • 相关阅读:
    金额与数字转化常用实用几个JS方法
    Jdb命令 The Java Debugger
    GLOBAL TEMPORARY TABLE
    安装与配置Nginx
    MySQL二进制安装与密码破解
    基于FPM构建企业RPM包
    安装Tomcat
    nginx配置优化
    DHCP原理及配置(三个小实验)
    DNS主、从服务器的配置
  • 原文地址:https://www.cnblogs.com/zengyjun/p/10104386.html
Copyright © 2011-2022 走看看