Maison > Article > base de données > Il existe plusieurs manières courantes d'implémenter le verrouillage optimiste.
Il existe deux manières courantes d'implémenter le verrouillage optimiste, à savoir : 1. Mécanisme de numéro de version 2. Algorithme CAS ; Parmi elles, la mise en œuvre du verrouillage optimiste via le mécanisme de numéro de version est la méthode la plus classique. Le mécanisme de numéro de version ajoute généralement un champ de version du numéro de version de la base de données à la table de données.
Méthode de mise en œuvre :
(apprentissage recommandé : tutoriel mysql)
1 . Le mécanisme du numéro de version
signifie généralement ajouter un champ de version du numéro de version de la base de données à la table de données pour exprimer le nombre de fois où les données ont été modifiées. Lorsque les données sont modifiées, leur valeur de version sera. augmenté de 1.
Par exemple :
Bien sûr, lorsque le thread A doit mettre à jour la valeur des données, il lira également la valeur de la version lors de la lecture des données lors de la soumission de la mise à jour, si la valeur de la version vient d'être lue. est mis à jour uniquement lorsque les valeurs de version dans la base de données actuelle sont égales, sinon réessayez l'opération de mise à jour jusqu'à ce que la mise à jour réussisse.
2. Algorithme CAS
CAS (comparer et échanger) comparer et échanger, il y a trois opérandes, l'adresse mémoire V, la valeur attendue B, la cible à remplacer Sous-A.
Lorsque l'instruction CAS est exécutée, elle compare si l'adresse mémoire V et la valeur attendue B sont égales, A est attribué à B. (Si elles ne sont pas égales, la comparaison sera. répétées jusqu'à ce qu'elles soient égales.) L'ensemble de l'opération d'affectation de comparaison est une opération atomique.
Inconvénients du CAS :
(1) Temps de cycle important : lorsque l'adresse mémoire V n'est pas égale à la valeur attendue B, la comparaison se poursuivra jusqu'à ce qu'elles soient égales ; 🎜> (2) Seul le fonctionnement atomique d'une variable partagée peut être garanti
(3) Si une variable V est la valeur A lors de sa première lecture, et qu'on vérifie qu'elle est toujours la valeur ; A lors de la préparation de l'attribution, alors nous pouvons. Cela signifie-t-il que sa valeur n'a pas été modifiée par d'autres threads ? Évidemment non, car pendant cette période, sa valeur peut être modifiée en d'autres valeurs, puis restituée à A, alors l'opération CAS pensera qu'elle n'a jamais été modifiée. Ce problème est appelé "ABA" de l'opération CAS. question;
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!