Articles of multithreading

Creazione di una coda di blocco in .NET?

Ho uno scenario in cui ho più thread che aggiungono a una coda e più thread che leggono dalla stessa coda. Se la coda raggiunge una dimensione specifica, tutti i thread che stanno riempiendo la coda verranno bloccati in aggiunta fino a quando un articolo non viene rimosso dalla coda. La soluzione qui sotto è […]

Perché volatile non è considerato utile nella programmazione C o C ++ multithread?

Come dimostrato in questa risposta che ho postato di recente, mi sembra di essere confuso circa l’utilità (o la sua mancanza) di volatile nei contesti di programmazione multi-thread. La mia comprensione è questa: ogni volta che una variabile può essere cambiata al di fuori del stream di controllo di un pezzo di codice che vi […]

Cos’è un thread daemon in Java?

Qualcuno può dirmi quali thread daemon sono in Java?

Cosa c’è di sbagliato nell’uso di Thread.Abort ()

Quindi so che non dovresti usare Thread.Abort() Ma non mi è mai stata data una buona spiegazione. C’è una penalità per le prestazioni o qualche trucco nascosto? So che non puoi ignorare / ingoiare l’eccezione ThreadAbortException (che ha senso)

Perché il blocco (questo) {…} è cattivo?

La documentazione MSDN dice che public class SomeObject { public void SomeOperation() { lock(this) { //Access instance variables } } } è “un problema se l’istanza è accessibile pubblicamente”. Mi chiedo perché? È perché la serratura si terrà più a lungo del necessario? O c’è qualche ragione più insidiosa?

Come interrompere correttamente la discussione in Java?

Ho bisogno di una soluzione per fermare correttamente il thread in Java. Ho la class IndexProcessor che implementa l’interfaccia Runnable: public class IndexProcessor implements Runnable { private static final Logger LOGGER = LoggerFactory.getLogger(IndexProcessor.class); @Override public void run() { boolean run = true; while (run) { try { LOGGER.debug(“Sleeping…”); Thread.sleep((long) 15000); LOGGER.debug(“Processing”); } catch (InterruptedException e) […]

Qual è la differenza tra Thread start () e Runnable run ()

Diciamo che abbiamo questi due Runnable: class R1 implements Runnable { public void run() { … } … } class R2 implements Runnable { public void run() { … } … } Allora qual è la differenza tra questo: public static void main() { R1 r1 = new R1(); R2 r2 = new R2(); r1.run(); […]

Automazione del modello di codice InvokeRequired

Sono diventato dolorosamente consapevole di quanto spesso è necessario scrivere il seguente modello di codice nel codice GUI event-driven, dove private void DoGUISwitch() { // cruisin for a bruisin’ through exception city object1.Visible = true; object2.Visible = false; } diventa: private void DoGUISwitch() { if (object1.InvokeRequired) { object1.Invoke(new MethodInvoker(() => { DoGUISwitch(); })); } else […]

Come interrompere BackgroundWorker sull’evento di chiusura della maschera?

Ho un modulo che genera un BackgroundWorker, che dovrebbe aggiornare la propria casella di testo del form (sul thread principale), quindi Invoke((Action) (…)); chiamata. Se in HandleClosingEvent faccio solo bgWorker.CancelAsync() poi ottengo ObjectDisposedException su Invoke(…) , in modo comprensibile. Ma se mi siedo in HandleClosingEvent e aspetto che bGWorker sia terminato, allora .Invoke (…) non […]

Usi mai la parola chiave volatile in Java?

Al lavoro oggi, ho trovato la parola chiave volatile in Java. Non essendo molto familiare con questo, ho trovato questa spiegazione: Teoria e pratica Java: gestione della volatilità Dato il dettaglio in cui questo articolo spiega la parola chiave in questione, la usi mai o potresti mai vedere un caso in cui potresti usare questa […]