Je envisage d'utiliser des threads C ++ 0X dans mon application au lieu de booster les fils. Cependant, je ne sais pas comment réimplémenter ce que j'ai avec des threads standard C ++ 0X, car ils ne semblent pas avoir une interruption Ma configuration actuelle est la suivante: p>
Les travailleurs appellent Cependant, dans c ++ 0x interruption () code>. P>
attendre () code> sur au moins deux variables de condition différentes. Master a un état "expiré": dans ce cas, il indique à tous les travailleurs de s'arrêter et de donner tout résultat qu'ils ont été obtenus à ce moment-là. Avec Boost Filets Master utilise juste
Interrupt_all () Code> sur un groupe de threads, ce qui cause des travailleurs à arrêter d'attendre. Au cas où ils n'attendent pas au moment présent, le maître définit également un indicateur
bool code> que les travailleurs vérifient périodiquement. P>
std :: thread code> Je ne vois aucun remplacement pour
interruption () code>. Est-ce que ça me manque quelque chose? Sinon, comment puis-je mettre en œuvre le schéma ci-dessus afin que les travailleurs ne puissent pas dormir pour toujours? P>
3 Réponses :
Malheureusement, je ne vois pas d'une autre manière que de voter, au lieu d'utiliser une attente d'attente une attente chronométrée et une variable pour indiquer l'interruption a été effectuée.
void th(Interruptor& interruptor) { try { ... while (cnd1.timed_wait(d)==false) { interruptor.check_interruption_point(); } ... } catch (interrupted_exception &) {} }
Je pense que je vais continuer à utiliser des fils de boost alors. Ils sont également buggy, mais au moins, j'ai une solution de contournement stable pour eux.
Boost d'attente fait sur l'interruption () consiste à émettre une notify_all sur la condition qu'un thread est actuellement bloqué, puis vérifiez si une interruption a été demandée. Si une interruption a été demandée, il fait un coup de pouce :: thread_interrupted. Vous pouvez écrire un ton propre Classe basée sur STD :: Fil avec le mécanisme. P>
Et écrivez probablement ma propre sous-classe de condition afin que le fil sache ce qu'il attend? Cela ressemble à un peu trop de travail pour moi.
En effet, c ++ 11 std :: thread ne propose pas de mécanisme standard pour cela (encore?). Par conséquent, je la décision de la Directrice de la Directrice d'utiliser Boost :: Thread pour le moment. P>
Nous préférerions utiliser C ++ 11 STD :: Installations. Mais nous ne souhaitons pas ré-construire une installation Cela aide à booster :: thread et std :: Le fil est tellement similaire que nous pensons que nous ne nous peignons pas dans un coin. (Nous nous attendons à une migration éventuelle sur STD :: Le fil d'être relativement facile, peut-être même trivial.) P> de Boost () CODE> installations, compléter avec la variable de condition FUTZING pour interrompre les dormeurs, etc., sans raison. Créer une infrastructure comme celle-ci est amusant em>, et pas si difficile, mais non improductif et moins standard que d'utiliser Boost. P>