Question Quelles sont les similitudes entre le modèle de mémoire Java et le modèle de mémoire C ++ 11?


Le nouveau standard c ++ introduit la notion de modèle de mémoire. Il y avait déjà des questions sur SO à ce sujet, qu'est-ce que cela signifie, comment cela change la façon dont nous écrivons le code en c ++ et ainsi de suite.

Je voudrais savoir comment le modèle de mémoire C ++ est lié au modèle de mémoire java plus ancien et bien connu (1.5). Est-ce la même? Est-ce similaire? Ont-ils des différences significatives? Si oui, pourquoi?

Le modèle de mémoire java existe depuis longtemps et beaucoup de personnes le savent très bien, donc je pense qu'il pourrait être utile, non seulement pour moi, d'apprendre le modèle de mémoire C ++, en le comparant à celui de Java.


38
2017-09-09 14:47


origine


Réponses:


Le modèle de mémoire Java a eu une influence importante sur le modèle de mémoire C ++ 11, et c'est là que nous avons tiré les termes arrive-avant et se synchronise avec de. Cependant, le modèle de mémoire C ++ 11 offre un contrôle beaucoup plus fin sur le classement de la mémoire que le modèle de mémoire Java.

Java volatile les variables sont équivalentes à C ++ 11 std::atomic<> variables, si vous utilisez std::memory_order_acquire commande de mémoire pour les lectures, std::memory_order_release commande pour les écritures, et std::memory_order_acq_rel commande pour les opérations RMW.

Il n'y a pas d'équivalent en Java à std::memory_order_relaxed, ou std::memory_order_seq_cst.


21
2017-09-09 20:37