Dans un programme C++ multithread, j'ai l'équivalent de cette course dans un thread:vide while ne pas vérifier l'état
while(obj->member) { } // waiting for obj->member to be set to false in another thread
et dans un autre thread, obj-> membre est défini sur false. Même si elle est définie sur false, la boucle ne se casse pas. Si je change à ceci:
while(obj->member) { Sleep(1) }
Il fonctionne en tant que membre prévu et des pauses lorsque obj-> est définie sur false dans l'autre thread.
Pourquoi ça marche comme ça?
Veuillez ne pas utiliser l'attente occupée - en savoir plus sur les variables d'état ou les primitives de synchronisation similaires. – Arkadiy
Quoi? Je n'ai aucune idée de ce que ça veut dire. – Hock
Je vais appuyer ce que @Arkadiy a dit (et si vous n'avez aucune idée de ce que cela signifie, vous devez faire beaucoup de lecture avant d'écrire du code multithread). En plus de l'attente occupée (qui est simplement une mauvaise forme), votre code n'est pas non plus thread thread. Compte tenu de la simplicité de ce que vous faites dans ce cas précis, cependant, je ne pense pas que vous rencontrerez un problème sur une architecture CPU commune. – rmeador