Articles of multithreading

Quão preciso é Thread.Sleep (TimeSpan)?

Eu me deparei com um teste de unidade que está falhando intermitentemente porque o tempo decorrido não é o que eu espero que seja. Um exemplo de como este teste se parece é: Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); TimeSpan oneSecond = new TimeSpan(0, 0, 1); for(int i=0; i<3; i++) { Thread.Sleep(oneSecond); } stopwatch.Stop(); Assert.GreaterOrEqual(stopwatch.ElapsedMilliseconds, […]

O que é um código de saída de thread?

O que exatamente é um código de saída de thread na janela de saída durante a debugging? Que informação me dá? É de alguma forma útil ou apenas uma coisa interna que não deveria me incomodar? The thread 0x552c has exited with code 259 (0x103). The thread 0x4440 has exited with code 0 (0x0). Existe […]

Cancelando uma tarefa pendente de forma síncrona no encadeamento da interface do usuário

Às vezes, depois de solicitar o cancelamento de uma tarefa pendente com CancellationTokenSource.Cancel , preciso garantir que a tarefa tenha atingido adequadamente o estado cancelado antes que eu possa continuar. Na maioria das vezes, enfrento essa situação quando o aplicativo está sendo encerrado e desejo cancelar todas as tarefas pendentes normalmente. No entanto, ele também […]

Como obter o uso da CPU por thread no windows (win32)

Procurando por funções de API do Win32, código de exemplo C ++ ou Delphi que me informa o uso da CPU (porcentagem e / ou tempo total de CPU) de um thread (não o total de um processo). Eu tenho o ID do segmento. Eu sei que o Sysinternals Process Explorer pode exibir essas informações, […]

Duplo verificado bloqueio em singleton

aqui está minha class personalizada para o padrão singleton. neste código, eu uso o bloqueio verificado como abaixo. Como eu leio muitos posts em alguma fonte, eles dizem que checagem dupla é útil porque evita que dois threads simultâneos executados ao mesmo tempo façam dois objects diferentes. public class DoubleCheckLocking { public static class SearchBox […]

C #: esperando por todos os segmentos para concluir

Eu estou correndo em um padrão comum no código que estou escrevendo, onde eu preciso esperar por todos os segmentos em um grupo para completar, com um tempo limite. O tempo limite é suposto ser o tempo necessário para que todos os threads sejam concluídos, portanto, simplesmente fazer thread.Join (timeout) para cada thread não funcionará, […]

Acontece antes de relacionamentos com campos voláteis e blocos sincronizados em Java – e seu impacto em variables ​​não voláteis?

Ainda sou muito novo no conceito de threading e tento entender mais sobre isso. Recentemente, me deparei com um post no blog What Volatile Means in Java, de Jeremy Manson, onde ele escreve: Quando um thread grava em uma variável volátil, e outro thread vê esse write, o primeiro thread informa ao segundo sobre todo […]

Obtendo o ID do encadeamento de um encadeamento

Em C # ao depurar threads por exemplo, você pode ver o ID de cada thread. Não consegui encontrar uma maneira de obter o mesmo thread, programaticamente. Eu não conseguia nem obter o ID do segmento atual (nas propriedades do Thread.currentThread ). Então, eu me pergunto como o Visual Studio obter os IDs dos segmentos, […]

Como você implementaria seu próprio bloqueio de leitor / gravador no C ++ 11?

Eu tenho um conjunto de estruturas de dados que eu preciso proteger com um bloqueio de leitores / gravador. Estou ciente de boost :: shared_lock, mas eu gostaria de ter uma implementação personalizada usando std :: mutex, std :: condition_variable e / ou std :: atomic para que eu possa entender melhor como funciona (e […]

Atomic UPDATE .. SELECT no Postgres

Eu estou construindo um tipo de mecanismo de enfileiramento. Existem linhas de dados que precisam de processamento e um sinalizador de status. Estou usando uma update .. returning cláusula para gerenciá-lo: UPDATE stuff SET computed = ‘working’ WHERE id = (SELECT id from STUFF WHERE computed IS NULL LIMIT 1) RETURNING * A parte de […]