Programação Paralela em Arquiteturas Multi-Core/Programação em Pthreads: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Flores (discussão | contribs)
Flores (discussão | contribs)
Linha 519:
O exemplo acima começa com a thread principal, que cria duas outras threads, e espera que elas terminem. Depois, a primeira thread pára em um semáforo, e espera que a variável de condição seja sinalizada por outra thread. Isso só ocorre três segundos depois, quando a segunda thread sinaliza a condição e termina. Depois, a primeira thread também termina sua execução, e depois a thread principal.
 
===== Depuração (''Debugging'') =====
 
A depuração consiste em um processo metódico para se encontrar e reduzir o número de erros, ou problemas, em um programa de computador ou um componente de hardware, fazendo-o se comportar como o que foi especificado, aumentando a sua qualidade. A depuração tende a ser bem mais complexa quando vários subsistemas estão estreitamente acoplados, pois as modificações em um deles pode afetar outros.
Linha 531:
Em suma, diversas ferramentas se encontram disponíveis para facilitar a depuração de programas com múltiplas threads, que ajudam a reduzir a complexidade da construção e manutenção de aplicações paralelas.
 
====== Depurando um programa em Pthreads <ref>http://homepages.dcc.ufmg.br/~coutinho/pthreads/</ref> ======
 
Para depurar o seu programa, compile-o com -g. Use o ddd, ou outro depurador gráfigo que te dê acesso ao console do gdb.
Linha 580:
 
'''frame 1''', quando vc está no topo da pilha, vc está no frame #0, vc pode ir para outros frames para ver com quais parâmetros uma função foi chamada, o valor das variáveis locais da função que chamou, etc.
 
===== Depurando com Eletric Fence =====
 
Para compilar seu programa com electric fence, vc tem que "linkar" ele com a biblioteca -lefence:
 
gcc ... -D_REENTRANT -lpthread -lefence
 
A electric fence vai substituir as funções malloc(), realloc() e free(), por versões que colocam uma proteção após a área alocada. Se vc tentar acessar um byte após o que vc alocou, vc vai tomar SEGFAULT na hora.
 
Assim: compile seu programa com electric fence, rode ele no ddd sem colocar breakpoint e ele vai parar no momento exato que seu programa estiver fazendo um acesso inválido. Caso ele pare dentro de uma função da glibc, de info stack e frame X pra ver qual função sua chamou a função que tomou segfault.
 
Atenção: ás vezes o electric fence dá SEGFAULT sozinho. Quando tomar um segmentation fault, veja a saida do programa. Se tiver algo como electric fence: internal error, o electric fence tomou segmentation fault sozinho.
 
O electric fence tem um limite para alocação de memória (cerca de 200MB), se vc ultrapassar esse limite vai receber uma mensagem assim:
 
ElectricFence Exiting: mprotect() failed: Cannot allocate memory
 
==== Aplicações ====