Je ne suis pas tout à fait sûr s'il est sûr de tourner sur une variable volatile dans les threads en mode utilisateur, pour mettre en œuvre un spin_lock léger, je regardais le code source de TBB, tbb_machine.h: 170,Est-il sécuritaire de tourner une variable volatile dans les threads en mode utilisateur?
//! Spin WHILE the value of the variable is equal to a given value
/** T and U should be comparable types. */
template<typename T, typename U>
void spin_wait_while_eq(const volatile T& location, U value) {
atomic_backoff backoff;
while(location==value) backoff.pause();
}
Et il n'y a pas de clôture dans la classe atomic_backoff comme je peux le voir. Alors que d'autres implémentation spin_lock en mode utilisateur, la plupart d'entre eux utilisent CAS (Compare and Swap).
Ce code est-il dans un '# ifdef' spécifique au compilateur ou similaire? Certains compilateurs implémentent des barrières de mémoire autour des accès "volatile". – jalf
non, il n'y a pas #ifdef ou similaire autour de cet extrait. – yongsun