美文网首页
go sync包的读写锁RWMutex的使用

go sync包的读写锁RWMutex的使用

作者: Venture_Mark | 来源:发表于2019-01-11 10:23 被阅读0次

sync包的读写锁RWMutex的使用(sync.RWMutex)

我们使用“读写”锁的场景主要是在多线程的安全操作下,并且读的情况多于写的情况,也就是说既满足多线程操作的安全性,也要确保性能不能太差,这时候,我们可以考虑使用读写锁。当然你也可以简单暴力直接使用互斥锁(Mutex)。

RWMutex的使用主要事项

1、读锁的时候无需等待读锁的结束
2、读锁的时候要等待写锁的结束
3、写锁的时候要等待读锁的结束
4、写锁的时候要等待写锁的结束

RWMutex的四种操作方法

RLock() //读锁定
RUnlock() //读解锁

Lock() //写锁定
Unlock() //写解锁

废话少说直接上代码:

package main

import (
    "sync"
    "time"
)

var m *sync.RWMutex

func main() {
    m = new(sync.RWMutex)
    go write(1)
    go read(21)
    go write(3)
    go read(22)
    go write(4)
    go read(23)
    go write(5)
    go read(24)
    go write(6)
    go read(25)
    go write(7)

    time.Sleep(20 * time.Second)
}

func read(i int) {
    println(i, "read start")
    m.RLock()
    var p = 0
    var pr = "read"
    for {
        pr += "."
        if p == 10 {
            break
        }
        time.Sleep(350 * time.Millisecond)
        p++
        println(i, pr)

    }
    m.RUnlock()
    println(i, "read end")
}

func write(i int) {
    println(i, "write start")

    m.Lock()
    var p = 0
    var pr = "write"
    for {
        pr += "."
        if p == 10 {
            break
        }
        time.Sleep(350 * time.Millisecond)
        p++
        println(i, pr)

    }
    m.Unlock()
    println(i, "write end")
}

执行结果:

image.png image.png

什么也不说了,如想更加深刻理解,请复制上面代码自己运行看看。

相关文章

  • go sync包的读写锁RWMutex的使用

    sync包的读写锁RWMutex的使用(sync.RWMutex) 我们使用“读写”锁的场景主要是在多线程的安全操...

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

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

  • golang 中 sync.Mutex 和 sync.RWMut

    介绍 golang 中的 sync 包实现了两种锁: Mutex:互斥锁 RWMutex:读写锁,RWMutex ...

  • golang笔记之基于共享变量的并发

    介绍 golang 中的 sync 包实现了两种锁: Mutex:互斥锁 RWMutex:读写锁,RWMutex ...

  • GO 读写锁sync.RWMutex(1)

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

  • rwmutex.go

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

  • Go 语言的锁

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

  • 读写锁和互斥锁 读写互斥锁,简称读写锁 mux sync.RWMutex Lock和Unlock分别对写锁进行锁定...

  • Go超时锁的设计和实现

    Go提供两种锁:sync.Mutex和sync.RWMutex。 sync.Mutex: 互斥锁。任意时刻,只能有...

  • sync/rwmutex go读写锁学习

    本文结构 背景 最近写go,看到学习一些go源码记录上,另外相关依赖代码这里简单说明一下 读写锁 概念去搜一下就好...

网友评论

      本文标题:go sync包的读写锁RWMutex的使用

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