Articles of multithreading

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 […]

Quando usar um loop Parallel.ForEach em vez de um foreach regular?

Estou um pouco confuso sobre Parallel.ForEach . O que é Parallel.ForEach e o que isso faz exatamente? Por favor, não faça referência a nenhum link do MSDN. Aqui está um exemplo simples: string[] lines = File.ReadAllLines(txtProxyListPath.Text); List list_lines = new List(lines); foreach (string line in list_lines) { //My Stuff } Como posso rewrite este exemplo […]

Por que usar um ReentrantLock se alguém pode usar sincronizado (isso)?

Eu estou tentando entender o que torna o bloqueio em simultaneidade tão importante se alguém pode usar synchronized (this) . No código fictício abaixo, posso fazer o seguinte: sincronizou todo o método ou sincronizou a área vulnerável (sincronizada (isto) {…}) OU bloqueie a área de código vulnerável com um ReentrantLock. Código: private final ReentrantLock lock […]

Se os threads compartilham o mesmo PID, como eles podem ser identificados?

Eu tenho uma consulta relacionada à implementação de threads no Linux. O Linux não possui suporte explícito a threads. No userspace, podemos usar uma biblioteca de threads (como o NPTL) para criar threads. Agora, se usarmos o NPTL, ele suportará o mapeamento 1: 1. O kernel usará a function clone() para implementar threads. Suponha que […]

System.Windows.Threading.Dispatcher e WinForms?

Um System.Windows.Threading.Dispatcher funciona no thread de interface do usuário de um aplicativo WinForms ? Se sim, porque? Ele está vindo de WindowsBase.dll, que parece ser um componente do WPF . Se não, como posso invocar unidades de trabalho de volta para o thread de interface do usuário? Eu encontrei Control.BeginInvoke() , mas parece desajeitado para […]

Os arrays de matrizes C # são seguros?

Em particular Crie uma function para obter uma matriz e um índice como parâmetros. Crie uma matriz de elementos. Crie um loop de contagem. Dentro do loop em um novo thread, atribua uma nova instância do object ao array usando o indexador passado. Eu sei como gerenciar os tópicos etc. Estou interessado em saber se […]