La bibliothèque standard fournit une classe mutex
, avec la possibilité de verrouiller manuellement et déverrouiller:équivalent thread_guard Pour lock_guard/unique_lock
std::mutex m;
m.lock();
// ...
m.unlock();
Cependant, la bibliothèque reconnaît aussi apparemment qu'une affaire commune est juste pour verrouiller le mutex à un certain point, et le déverrouiller en quittant un bloc. Pour cela, il fournit std::lock_guard
et std::unique_lock
:
std::mutex m;
std::lock_guard<std::mutex> lock(m);
// ...
// Automatic unlock
Je pense qu'un motif assez courant pour les fils, est de créer une (que ce soit en tant que variable de la pile, ou un membre), puis join
it before destructing it:
std::thread t(foo);
// ...
t.join();
il semble facile d'écrire un thread_guard
, qui prendrait une thread
(ou une séquence de thread
s), et serait tout simplement appeler join
sur sa propre destruction:
std::thread t(foo);
thread_guard<std::thread> g(t);
// ...
// Join automatically
Existe-t-il une classe de bibliothèque standard comme celle-ci?
Si non, y a-t-il une raison pour éviter cela?
Vous pouvez toujours détacher le fil, et il serait "joint" (pas vraiment joint, mais le même nettoyage des ressources se produirait) automatiquement lorsque le fil se termine. –
@JoachimPileborg Merci. Détacher fait quelque chose de différent, cependant, non? Si vous vous joignez (directement, indirectement) avant de quitter un bloc, vous savez que, une fois le bloc terminé, le thread a fini. –
'joining_thread' a été récemment proposé mais [abattu] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0379r0.html). –