• [^] # Re: À bas COW, vive SSO!

    Posté par . En réponse à la dépêche Le compilateur GCC 5.1 : harder, better, faster, stronger. Évalué à 5.

    Je voudrais préciser un peu l'implémentation du COW et son coût, il me semble que l'utilisation de memory barrier peut être évitée, mais comme il est tard je me trompe peut être :

    • share path : atomic_add sur le refcount, memory order relaxed.
    • destruct path: : actomic_fetch_add, si la valeur fetch est 1, alors libérer la mémoire.
    • modify path : atomic_load avec order relaxed. Si le refcount est 1, modifier les données. Sinon, copier les données dans une nouvelle chaine, changer le pointer, puis release path.

    Dans les 3 cas, il n'y a pas besoin d'utiliser des memory barrier, l'ordre relaxed est utilisable, parce que la chaine elle même est toujours immutable et sera réallouée puis copiée en cas de modification, sauf si le thread courant est l'unique propriétaire des données.

    Evidemment, le côut de l'order Relaxed diffère selon l'archi.