Articles of multithreading

É seguro obter valores de um java.util.HashMap de vários threads (sem modificação)?

Há um caso em que um mapa será construído e, uma vez inicializado, ele nunca será modificado novamente. No entanto, será acessado (via get (key) apenas) de vários threads. É seguro usar um java.util.HashMap dessa maneira? (Atualmente, estou felizmente usando um java.util.concurrent.ConcurrentHashMap , e não tenho nenhuma necessidade medida para melhorar o desempenho, mas estou […]

Diferença entre ponteiro e referência como parâmetro de thread

Este é o exemplo: #include #include using namespace std; void f1(double& ret) { ret=5.; } void f2(double* ret) { *ret=5.; } int main() { double ret=0.; thread t1(f1, ret); t1.join(); cout << "ret=" << ret << endl; thread t2(f2, &ret); t2.join(); cout << "ret=" << ret << endl; } E a saída é: ret=0 ret=5 […]

JavaFX lança outro aplicativo

Eu tenho esmagado minha cabeça com o JavaFx … Isso funciona quando não há instâncias de um aplicativo em execução: public class Runner { public static void main(String[] args) { anotherApp app = new anotherApp(); new Thread(app).start(); } } public class anotherApp extends Application implements Runnable { @Override public void start(Stage stage) { } @Override […]

Thread.Sleep por menos de 1 milissegundo

Eu quero chamar thread sleep com menos de 1 milissegundo. Eu li que nem thread.Sleep nem Windows-OS suportam isso. qual é a solução para isso? Para todos os que se perguntam por que eu preciso disso: estou fazendo um teste de estresse e quero saber quantas mensagens meu módulo pode manipular por segundo. Então meu […]

Padrão de tempo limite – Quão ruim é Thread.Abort realmente?

Eu li em vários sites que Thread.Abort não é muito bom de usar. Nesse caso, como você implementa um padrão de tempo limite? Por exemplo, eu li que o MS usa o padrão abaixo (que envolvi em um método de extensão) em todo o framework. Pessoalmente, acho que esta é uma extensão muito legal, mas […]

Como resolver a declaração “Double-Checked Locking is Broken” em Java?

Eu quero implementar a boot lenta para multithreading em Java. Eu tenho algum código do tipo: class Foo { private Helper helper = null; public Helper getHelper() { if (helper == null) { Helper h; synchronized(this) { h = helper; if (h == null) synchronized (this) { h = new Helper(); } // release inner […]

Como verificar se um std :: thread ainda está em execução?

Como posso verificar se um std::thread ainda está em execução (de maneira independente da plataforma)? Falta um método timed_join() e joinable() não é para isso. Eu pensei em bloquear um mutex com um std::lock_guard no thread e usando o método try_lock() do mutex para determinar se ele ainda está bloqueado (o thread está sendo executado), […]

Como obter o ThreadPoolExecutor para aumentar os segmentos para o máximo antes de enfileirar?

Eu tenho sido frustrado por algum tempo com o comportamento padrão de ThreadPoolExecutor que faz o backup dos pools de segmentos do ExecutorService que muitos de nós usam. Para citar os Javadocs: Se houver mais de corePoolSize, mas menos de maximumPoolSize threads em execução, um novo thread será criado apenas se a fila estiver cheia […]

Reentrante bloqueia em c #

O seguinte código resultará em um deadlock usando C # no .NET? class MyClass { private object lockObj = new object(); public void Foo() { lock(lockObj) { Bar(); } } public void Bar() { lock(lockObj) { // Do something } } }

A iteração de valores do ConcurrentHashMap é segura para encadeamento?

No javadoc para ConcurrentHashMap é o seguinte: As operações de recuperação (incluindo get) geralmente não são bloqueadas, portanto podem se sobrepor às operações de atualização (incluindo colocar e remover). As recuperações refletem os resultados das operações de atualização mais recentes concluídas no início. Para operações agregadas, como putAll e clear, as recuperações simultâneas podem refletir […]