>  기사  >  백엔드 개발  >  golang 읽기-쓰기 잠금 정보

golang 읽기-쓰기 잠금 정보

PHPz
PHPz앞으로
2020-09-25 14:18:473300검색

다음 칼럼에서는 golang 튜토리얼 칼럼에서 golang 읽기-쓰기 잠금을 소개하겠습니다. 필요한 친구들에게 도움이 되길 바랍니다!

golang 읽기-쓰기 잠금 정보

golang읽기-쓰기 잠금은

  • 읽기 잠금: 여러 코루틴 읽기 작업을 동시에 수행할 수 있지만 쓰기 작업은 허용되지 않습니다.

  • 쓰기 잠금: 하나만 쓰기 작업 수행과 동시에 코루틴이 허용되며 다른 쓰기 작업 및 읽기 작업은 허용되지 않습니다

읽기-쓰기 잠금에는 네 가지 방법이 있습니다

  • RLock: 읽기 잠금 획득

  • RUnLock: 읽기 잠금 해제

  • Lock: 쓰기 잠금 획득

  • UnLock: 쓰기 잠금 해제

사용 예시는 다음과 같습니다

package main

import (    "fmt"
    "sync"
    "time")var gRWLock *sync.RWMutexvar gVar intfunc 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\n", id)
    defer fmt.Printf("Read Coroutine: %d end\n", id)
    gRWLock.RLock()
    fmt.Printf("gVar %d\n", gVar)
    time.Sleep(time.Second)
    gRWLock.RUnlock()

    wg.Done()

}

func Write(id int, wg *sync.WaitGroup) {
    fmt.Printf("Write Coroutine: %d start\n", id)
    defer fmt.Printf("Write Coroutine: %d end\n", id)
    gRWLock.Lock()
    gVar = gVar + 100
    fmt.Printf("gVar %d\n", gVar)
    time.Sleep(time.Second)
    gRWLock.Unlock()
    wg.Done()

}

위 내용은 golang 읽기-쓰기 잠금 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제