다음 칼럼에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!