Articles of Multithreading

Beispiel, das mit HandlerThread kommuniziert

Ich möchte einen HandlerThread aus dem GUI-Thread einrichten. Einige Zeit später, wenn eine Schaltfläche auf der GUI geklickt wird, wird callHello () ausgeführt, die dann eine Nachricht an ein HelloLogger-Objekt sendet, das sich auf dem Nicht-GUI-Thread befindet, der asynchron “Hello World” protokolliert. Ich habe eine Anzahl von Sachen probiert, einige blockieren unbegrenzt, einige empfangen nie […]

Wann sollte eine Parallel.ForEach-Schleife anstelle einer regulären foreach verwendet werden?

Ich bin etwas verwirrt über Parallel.ForEach . Was ist Parallel.ForEach und was genau macht es? Bitte verweisen Sie nicht auf einen MSDN-Link. Hier ist ein einfaches Beispiel: string[] lines = File.ReadAllLines(txtProxyListPath.Text); List list_lines = new List(lines); foreach (string line in list_lines) { //My Stuff } Wie kann ich dieses Beispiel mit Parallel.ForEach umschreiben?

Wie überprüft man, ob ein std :: -Thread noch läuft?

Wie kann ich überprüfen, ob ein std::thread (plattformunabhängig) noch läuft? Es fehlt eine timed_join() Methode und joinable() ist dafür nicht gedacht. Ich dachte daran, einen Mutex mit einem std::lock_guard in den Thread zu std::lock_guard und mithilfe der try_lock() -Methode des Mutex festzustellen, ob er noch gesperrt ist (der Thread läuft), aber es erscheint mir unnötig […]

Wie wird CountDownLatch in Java Multithreading verwendet?

Kann mir jemand helfen zu verstehen, was Java CountDownLatch ist und wann es zu benutzen ist? Ich habe keine klare Vorstellung davon, wie dieses Programm funktioniert. Wie ich weiß, beginnen alle drei Threads gleichzeitig und jeder Thread ruft CountDownLatch nach 3000ms auf. Also Countdown wird eins nach dem anderen dekrementieren. Nachdem der Signalspeicher auf Null […]

Warum sollte man eine ReentrantLock verwenden, wenn man synchronisierte (this) benutzen kann?

Ich versuche zu verstehen, was die Sperre in Nebenläufigkeit so wichtig macht, wenn man synchronized (this) . Im Dummy-Code unten kann ich entweder: synchronisierte die gesamte Methode oder synchronisierte den anfälligen Bereich (synchronisierte (this) {…}) ODER sperren Sie den anfälligen Codebereich mit einer ReentrantLock. Code: private final ReentrantLock lock = new ReentrantLock(); private static List […]

Ist das Iterieren von ConcurrentHashMap-Werten threadsicher?

In javadoc für ConcurrentHashMap ist Folgendes: Wiederherstellungsoperationen (einschließlich get) werden im Allgemeinen nicht blockiert und können sich daher mit Aktualisierungsoperationen (einschließlich Put und Remove) überschneiden. Retrievals spiegeln die Ergebnisse der zuletzt abgeschlossenen Aktualisierungsoperationen wider, die an ihrem Beginn anhalten. Für Aggregatoperationen wie putAll und clear können gleichzeitige Abrufvorgänge das Einfügen oder Entfernen von nur einigen […]

Wenn Threads dieselbe PID verwenden, wie können sie identifiziert werden?

Ich habe eine Abfrage im Zusammenhang mit der Implementierung von Threads in Linux. Linux hat keine explizite Thread-Unterstützung. Im Benutzerbereich können wir eine Thread-Bibliothek (wie NPTL) zum Erstellen von Threads verwenden. Jetzt, wenn wir NPTL verwenden, unterstützt es 1: 1-Mapping. Der coreel verwendet die function clone() , um Threads zu implementieren. Angenommen, ich habe 4 […]

Sind C # -Arrays threadsicher?

Bestimmtes Erstellen Sie eine function, um ein Array und einen Index als Parameter zu verwenden. Erstellen Sie ein Element-Array. Erstellen Sie eine Zählschleife. Innerhalb der Schleife eines neuen Threads weisen Sie dem Array mit dem übergebenen Indexer eine neue Instanz des Objekts zu. Ich weiß, wie man die Threads usw. verwaltet. Ich bin daran interessiert […]

System.Windows.Threading.Dispatcher und WinForms?

functioniert ein System.Windows.Threading.Dispatcher auf dem UI-Thread einer WinForms Anwendung? Wenn ja, warum? Es kommt von WindowsBase.dll, die eine WPF Komponente zu sein scheint. Wenn nicht, wie kann ich Arbeitseinheiten wieder auf den UI-Thread aufrufen? Ich habe Control.BeginInvoke() , aber es scheint plump, ein Steuerelement zu erstellen, das nur auf den ursprünglichen Thread verweist.

Warum wird der Destruktor einer Zukunft von `std :: async` blockiert?

Beim Versuch, eine andere Stackoverflow-Frage zu beantworten, erkannte ich, dass dieses einfache C ++ 11-Snippet den aufrufenden Thread implizit blockiert: std::async(std::launch::async, run_async_task) Für mich wäre das der kanonische C ++ 11 Weg gewesen, eine Aufgabe asynchron zu starten, ohne sich um das Ergebnis zu kümmern. Stattdessen muss man explizit einen Thread erstellen und lösen (siehe […]