46 votes

Déplacer le constructeur pour std :: mutex

De nombreuses classes de la bibliothèque standard c++ ont désormais des constructeurs de déplacement, par exemple -

 thread::thread(thread&& t)

Mais il semble que std::mutex ne le fasse pas. Je comprends qu'ils ne peuvent pas être copiés, mais il semble logique de pouvoir en renvoyer un à partir d'une fonction "make_mutex" par exemple. (Je ne dis pas que c'est utile, juste que ça a du sens)

Y a-t-il une raison pour laquelle std::mutex n'a pas de constructeur de déplacement ?

42voto

sehe Points 123151

Eh bien... principalement parce que je ne pense pas qu'ils devraient bouger . Littéralement.

Dans certains systèmes d'exploitation, un mutex peut être modélisé comme un handle (vous pouvez donc les copier), mais un mutex IIRC pthreads est manipulé sur place. Si vous allez déplacer cela, tout threadsafety va sortir de la fenêtre (comment les autres threads sauraient-ils que le mutex vient de changer son adresse mémoire...) ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X