• [^] # Re: templates variadiques

    Posté par . En réponse à la dépêche Le standard C++0x a enfin été voté. Évalué à 3.

    Oui, mais non :-)

    Tout d'abords cet article s'applique au code kernel ou tu dispose de primitive de synchro bas niveau. Pour du code portable, dans le cas de l'attente active dont il parle par exemple, un accès volatile est plus portable.

    Ensuite, même si tu dispose de ces primitives, il y a pas mal de cas ou il est préférable d'utiliser volatile. Toutes les primitives en question vont placer une "full memory barier" ce qui oblige le compilateur à bloquer toutes les optimisation en avant et en après. Une variable volatile ne bloque les optimisations que pour cette variable, ce qui peut-etre très utile dans le cas ou tu n'as pas besoin d'un lock.

    Par exemple, dans le cas d'une table de hashage (presque) lock-less, un thread qui écris une valeur doit mettre à jour deux case mémoires. Un thread qui veux lire cette valeur, doit faire une attente active sur la deuxième au cas ou le premier thread ai été interrompu entre les deux écritures. Un accès volatile est beaucoup moins couteux que la solution proposée.