美文网首页
Go 读写锁

Go 读写锁

作者: 来到了没有知识的荒原 | 来源:发表于2020-07-18 17:35 被阅读0次

读写锁sync.RWMutext实现读者写者问题

package main

import (
    "fmt"
    "sync"
    "time"
)

var rwmutex *sync.RWMutex
var wg *sync.WaitGroup

func main() {
    rwmutex = new(sync.RWMutex)
    wg = new(sync.WaitGroup)

    wg.Add(4)
    go readData(1)
    go writeData(2)
    go readData(3)
    go writeData(4)

    wg.Wait()
    fmt.Println("main...over... ")
}

func writeData(i int) {
    defer wg.Done()

    fmt.Println(i, "准备写...")
    rwmutex.Lock()
    fmt.Println(i, "正在写...")
    time.Sleep(3 * time.Second)
    fmt.Println(i, "写结束(锁内)...")
    rwmutex.Unlock()
    fmt.Println(i, "写结束...")
}
func readData(i int) {
    defer wg.Done()

    fmt.Println(i, "准备读...")
    rwmutex.RLock()
    fmt.Println(i, "正在读取...")
    time.Sleep(3 * time.Second)
    fmt.Println(i, "读结束(锁内)...")
    rwmutex.RUnlock()
    fmt.Println(i, "读结束...")
}

相关文章

  • Go 语言的锁

    Go 语言提供两类锁: 互斥锁(Mutex)和读写锁(RWMutex)。其中读写锁(RWMutex)是基于互斥锁(...

  • Go 读写锁

    读写锁sync.RWMutext实现读者写者问题

  • GO 读写锁sync.RWMutex(1)

    继GO语言锁机制(1)后,我们继续来探讨GO语言的锁机制 sync.RWMutex (读写锁,R代表度,W代表写)...

  • GO互斥锁、读写锁

    读写锁:读时共享,写时独占。写锁优先级比读锁优先级高 通过mutex实现读时共享,写时独占代码示例: 打印结果: ...

  • go RWMutex源码解析

    RWMutex 基于go 1.13源码总的来说读写锁就是利用互斥锁和CAS维护2个关于读锁的变量以及runtime...

  • rwmutex.go

    概述 rwmutex.go即读写锁,内部基于atomic和sync.mutex实现,提供四个方法 RLock 读锁...

  • Golang学习笔记之互斥锁(Mutex)

    Go语言包中的sync包提供了两种锁,互斥锁(sync.Mutex)和读写锁(sync.RWMutex) 这一篇博...

  • Go语言高并发Map解决方案

    Go语言高并发Map解决方案 Go语言基础库中的map不是并发安全的,不过基于读写锁可以实现线程安全;不过在Go1...

  • Go 并发之读写锁

    在业务当中我们常常需要遇到并发读写,其中读的频率远大于写的频率的情况,对数据的写入是需要互斥的,也就是同时只能允许...

  • golang 基础(31) 锁

    在 go 语言中提供了并发编程模型和工具外,还提供传统的同步工具锁,包括互斥锁和读写锁有关互斥锁有些内容我们必须清...

网友评论

      本文标题:Go 读写锁

      本文链接:https://www.haomeiwen.com/subject/yjhfkktx.html