Maison  >  Article  >  développement back-end  >  Quand utiliser le verrouillage dans Golang

Quand utiliser le verrouillage dans Golang

(*-*)浩
(*-*)浩original
2019-12-27 11:30:552762parcourir

Quand utiliser le verrouillage dans Golang

Le package de synchronisation du package de langue Go fournit deux types de verrouillage : sync.Mutex et sync.RWMutex.                                                                                                               (Recommandé pour apprendre : go)

Le Mutex est le type de verrouillage le plus simple, et il est également relativement violent. Lorsqu'une goroutine obtient le Mutex, les autres goroutines ne peuvent que se comporter. Attendez que cette goroutine libère le Mutex.

RWMutex est relativement convivial et est un modèle classique à écriture une fois, lecture multiple. Lorsque le verrou de lecture est occupé, l'écriture sera bloquée, mais la lecture ne sera pas bloquée, c'est-à-dire que plusieurs goroutines peuvent acquérir le verrou de lecture en même temps (en appelant la méthode RLock() ;

, tandis que le verrou de lecture est occupé. le verrouillage en écriture (appelant la méthode Lock()) empêchera toute autre goroutine (en lecture ou en écriture) d'entrer, le verrou entier équivaut à appartenir exclusivement à cette goroutine. Depuis l'implémentation de RWMutex, le type RWMutex combine en fait Mutex. :

type RWMutex struct {
    w Mutex
    writerSem uint32
    readerSem uint32
    readerCount int32
    readerWait int32
}

sync.mutex Après le verrouillage, la lecture ou l'écriture à d'autres endroits est interdite Cela s'applique aux modifications possibles des mêmes données dans différentes coroutines go

L'utilisation du verrouillage et du déverrouillage dans sync.rwmutex est similaire à sync.mutex

L'utilisation de rlock et runlock de sync.rwmutex convient à la lecture de données afin d'éviter les échecs de lecture causés par l'écriture dans d'autres endroits qui peuvent survenir lors de la lecture

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn