Articles of multithreading

Pourquoi les compilateurs ne fusionnent-ils pas les écritures std :: atomic redondantes?

Je me demande pourquoi aucun compilateur n’est prêt à fusionner des écritures consécutives de même valeur avec une seule variable atomique, par exemple: #include std::atomic y(0); void f() { auto order = std::memory_order_relaxed; y.store(1, order); y.store(1, order); y.store(1, order); } Chaque compilateur que j’ai essayé émettra l’écriture ci-dessus trois fois. Quel observateur légitime, sans compétition, […]

Implémentation de classe de journalisation sécurisée des threads

Serait-ce la manière correcte d’implémenter une classe de journalisation relativement simple et sécurisée? Je sais que je ne ferme jamais explicitement TextWriter , cela poserait-il un problème? Lorsque j’ai initialement utilisé la méthode TextWriter.Synchronized , cela ne semblait pas fonctionner tant que je ne l’avais pas initialisé dans un constructeur statique et l’avais fait en […]

Solution de contournement pour la limite de handle WaitHandle.WaitAll 64?

Mon application génère des charges de différents threads de travail de petite taille via ThreadPool.QueueUserWorkItem dont je garde la trace via plusieurs instances ManualResetEvent . J’utilise la méthode WaitHandle.WaitAll pour bloquer la fermeture de mon application jusqu’à la fin de ces threads. Je n’ai jamais eu de problèmes auparavant, cependant, comme mon application est plus […]

Qu’est-ce qu’une «étincelle» dans Haskell

Je suis confus au sujet de la notion d’étincelle Est-ce un fil dans Haskell? Ou l’action de créer un nouveau fil? Merci à tous: Donc pour résumer, les étincelles ne sont pas des threads mais plutôt des unités de calcul (des tâches à mettre en termes C # / Java). C’est donc la manière de […]

Comment quitter tous les threads en cours d’exécution?

Le code suivant ne quitte pas l’application. Comment puis-je quitter l’application et m’assurer que tous les threads en cours d’exécution sont fermés? foreach (Form form in Application.OpenForms) { form.Close(); } Application.Exit();

Arrêtez de manière fiable System.Threading.Timer?

Eh bien, j’ai beaucoup cherché une solution à cela. Je cherche un moyen simple et propre d’empêcher la méthode de rappel d’un System.Threading.Timer d’être invoquée après l’avoir arrêtée. Je n’arrive pas à en trouver, et cela m’a amené, à l’occasion, à recourir aux combats redoutables de thread-thread.sleep-thread.abort. Peut-on le faire avec lock? Aidez-moi à trouver […]

Éviter les malheurs d’Invoke / BeginInvoke dans la gestion des événements WinForm inter-threads?

Je suis toujours en proie à des threads d’arrière-plan dans une interface utilisateur WinForm. Pourquoi? Voici quelques problèmes: De toute évidence, le problème le plus important, je ne peux pas modifier un contrôle à moins que j’exécute sur le même thread qui l’a créé. Comme vous le savez, Invoke, BeginInvoke, etc. ne sont disponibles qu’après […]

Description simple des threads de travail et d’E / S dans .NET

Il est très difficile de trouver une description détaillée mais simple des threads de travail et d’E / S dans .NET Qu’est-ce qui est clair pour moi sur ce sujet (mais peut ne pas être techniquement précis): Les threads de travail sont des threads qui doivent utiliser le processeur pour leur travail. Les threads E […]

Comment rendre une méthode annulable sans devenir moche?

Je suis actuellement en train de moderniser nos méthodes de longue durée pour qu’elles soient annulables. Je prévois d’utiliser System.Threading.Tasks.CancellationToken pour l’implémenter. Nos méthodes effectuent généralement quelques étapes longues (envoi de commandes puis attente du matériel principalement), par exemple void Run() { Step1(); Step2(); Step3(); } Ma première pensée (peut-être stupide) sur l’annulation transformerait cela […]

Quelle pourrait être la cause de RejectedExecutionException

Je reçois cette exception sur mon serveur tomcat (+ liferay) java.util.concurrent.RejectedExecutionException ma classe est comme ça: public class SingleExecutor extends ThreadPoolExecutor { public SingleExecutor(){ super(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue()); } @Override public void execute(Runnable command) { if(command instanceof AccessLogInsert){ AccessLogInsert ali = (AccessLogInsert)command; ali.setConn(conn); ali.setPs(ps); } super.execute(command); } } Je reçois cette exception sur la ligne […]