Vous êtes sur la page 1sur 1

Sumrio

O artigo trata basicamente de um problema conhecido como data race. Nos tpicos, temos
exemplos para ilustrar como ocorre uma data race e como esse problema afeta o resultado de um
programa. No decorrer do artigo os autores tambm mostram como evit-lo. Basicamente, ocorre
quando duas threads acessam a mesma varivel, posteriormente ele define mais tecnicamente.
Num simples algoritmo de incremento, duas threads podem acessar a varivel e somar um
de tal forma que no final teremos uma varivel com incremento de um ao invs de dois. Uma
excluso mtua poderia resolver o problema, mas tornaria o programa lento.
Pensando apenas em um programa que realize a tarefa de incremento de maneira simples, ou
seja, aproximada sem mutex. O que ocorre nesse ltimo caso que os contadores perdem metade
da contagem, causada principalmente pela comunicao de cache dos processadores ou uma
thread no faz nada, apenas inicializa com zero e no final incrementa um e o programa acaba. A
concluso que sem uma excluso mtua ou uma sincronizao adequada entre as threads, o
programa acessa a mesma varivel diversas vezes.
Aborda se usar uma flag serve como soluo de data race. O problema que em alguns
processadores o armazenamento pode ser visvel para outros processos, assim uma thread pode
acessar o contedo de uma varivel antes da outra thread e escrev-la. Portanto, tm-se uma data
race, mesmo com uma flag para evitar o acesso simultneo das threads a uma varivel.
Interessante notar que o problema pode ocorrer com pouca frequncia, mas pode ser facilmente
ignorado em um teste ou ao debugar o cdigo.
Um importante conceito apresentado de consistncia sequencial. Essa ideia pode ser
definida como a execuo de um passo em uma thread, e ento depois outra thread executa o
mesmo passo ou o seguinte.
Algumas solues tambm so apresentadas, mas algumas tem suas limitaes como os uso
de excluso mtua e sincronizao de variveis. O primeiro caso (mutex) apresenta um grande
overhead e o sincronismo de variveis tem pouca aplicabilidade para programas grandes. H a
possibilidade de se usar mecanismos existentes em linguagens, mas poucas pessoas sabem como
us-los.
Programas grandes em quase todas as situaes contm bugs e muitos desses bugs so
data races. Para programas complexos difcil usar um debug corretamente, a grande questo
criar um hardware que evite esses bugs, um software capaz de detectar esses problemas e uma
linguagem voltada para eliminar essa situao.
Crtica
Trata de maneira bem simples e informativa de uma situao corriqueira para alguns
programadores que buscam implementar cdigos paralelos ou concorrentes. Explica como resolver
o problema e mostra como o em diversas situaes.
O artigo no fala de condio de corrida, mas pode-se afirmar que h casos em que data
races levam a race conditions e h casos em que h apenas um deles. Ou seja, a questo de
processos concorrentes e paralelos tem caractersticas similares, at porque so conceitos parecidos.
Ao ler o artigo, a ideia que fica que alm de entender sobre os conceitos bsicos de
paralelismos ou processos concorrentes, importante criar o melhor programa sequencial sem
bugs ou defeitos para maximizar o desempenho do trabalho paralelo/concorrente.

Vous aimerez peut-être aussi