次のコラム golang チュートリアル では、golang の読み書きロックについて紹介します。困っている友人の役に立てば幸いです。
golang読み取り/書き込みロックの特徴は、
読み取りロックです。複数のプロトコルを使用できます。同時に実行されます 読み取り操作を処理します。書き込み操作は許可されません
書き込みロック: 書き込み操作を同時に実行できるのは 1 つのコルーチンのみで、他の書き込み操作と読み取り操作は同時に実行できます。は許可されていません
読み取り/書き込みロックには 4 つの方法があります
##使用例は以下の通りです
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 中国語 Web サイトの他の関連記事を参照してください。