Les opérations atomiques sur la mémoire n'ont pas besoin d'être exécutées directement sur la RAM, car elles peuvent être effectuées dans le cache tant que tous les observateurs les perçoivent comme atomiques. La cohérence du cache entre les cœurs garantit que même les opérations DMA respectent cette atomicité.
Pour les charges alignées ou les magasins jusqu'à 64 bits, l'atomicité est obtenu « gratuitement » car l'opération est terminée dans les chemins de données du système, y compris entre les cœurs, la mémoire et PCIe. Cela signifie que le matériel du processeur peut garantir l'atomicité de l'opération sans aucun matériel supplémentaire ni blocage d'autres requêtes.
Modification des données dans le Le cache L1 est atomiquement suffisant pour l’atomicité, car tout autre accès au cœur ou au DMA observera le changement en une seule opération. Cette modification peut survenir plus tard que le stockage initial en raison d'une exécution dans le désordre.
Optimisations des performances mises à part, accès aux données au-delà des limites de la ligne de cache peut entraîner un comportement non atomique. Sur x86, les accès alignés jusqu'à 8 octets sont atomiques, ce qui implique que des lignes de cache entières (généralement 64B) sont transférées de manière atomique même si les chemins de données sont plus étroits. Cependant, les accès plus larges nécessitent un verrou pour se protéger contre les accès simultanés.
Les opérations de lecture-modification-écriture atomique posent un plus grand défi . Pour maintenir l'atomicité, le noyau doit maintenir la ligne de cache dans l'état Modifié et bloquer les modifications externes pendant que l'opération est en cours. Pour les opérations non alignées, un verrouillage de bus peut être nécessaire pour garantir que les autres cœurs observent les changements comme étant atomiques.
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!