un bete code qui incrément deux variables, l'une avecADD
, l'autre avecLOCK ADD
. Vu que le verrou se fait sur toute la ligne de cache, tous les accès sont délayés même s'il n'y pas de data race possible. C'est bon a savoir car par exemple si tu associes une verrou avec un tableau
struct lockablearray
{
bool lock;
uint elements[100];
}
a chaque fois qu'une autre tache voudra prendre le verrou, elle bloquera momentanément l’accès au éléments a la tache qui détient le verrou. Si par contre tu mets les éléments sur la ligne de cache suivante avec
struct lockablearray
{
bool lock;
char _pad[64 - sizeof(bool)];
uint elements[100];
}
alors la tache détentrice du verrou ne peut pas être bloquée.
Message édité le 29 septembre 2016 à 15:11:05 par