TRABALHO DE CONCEITOS DE LINGUAGENS DE PROGRAMAÇÃO Prof. Jorge Habib Hanna El Khouri Aluno: _____________ Turma: 2º A UNIOESTE CONCORRÊNCIA 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Quais são os três níveis de concorrência nos programas? Qual nível de concorrência de programa é melhor suportado por computadores SIMD? Qual nível de concorrência de programa é melhor suportado por computadores MIMD? O que é o thread de controle de um programa? Defina tarefa, tarefa disjunta, sincronização, sincronização de competição e cooperação,vivência e deadlock. Quais tipos de tarefa não exigem nenhum tipo de sincronização? Quais são as questões de projeto referentes ao suporte de linguagem para concorrência? Descreva as ações das operações de espera (wait) e de liberação (release) para semáforos. O que é um semáforo binário? O que é um de contagem? Quais são os principais problemas decorrentes do uso de semáforos para fornecer sincronização? Qual vantagem os monitores têm sobre os semáforos? Especificamente, qual unidade de programa Java pode rodar concorrentemente com o método principal em um programa aplicativo? O que o método sleep Java faz? O que o método yield Java faz? Quais são as duas construções Java que podem ser sincronizadas? Quais métodos Java são usados para suportar sincronização de cooperação? Explique porque o Java inclui a interface Runnable. Qual é a melhor ação que um sistema pode desenvolver quando um deadlock é detectado? Espera ocupada (busy waiting) é um método por meio do qual uma tarefa espera que determinado evento verifique continuamente se esse evento ocorre. Qual é o problema com essa abordagem? No exemplo do produtor-consumidor, suponhamos que substituímos incorretamente a release(access) do processo consumidor por wait(access). Qual seria o resultado desse erro na execução do sistema? Suponhamos que duas tarefas, A e B, devam usar a variável compartilhada TAM_BUF. A tarefa A adiciona 2 a TAM_BUF, e a tarefa B subtrai 1 dela. Suponhamos que tais operações aritméticas sejam feitas pelo processo em três etapas: buscar o valor atual, realizar a operação aritmética e colocar de volta o novo valor. Na ausência de sincronização de competição, quais sequências de eventos são possíveis e quais valores resultam dessas operações? Suponhamos que o valor inicial de TAM_BUF seja 6. EXCEÇÕES 22. 23. Defina exceção, manipulador de exceções, levantamento de uma exceção, desativação de uma exceção e exceção incorporada. Quais são as questões de projeto relativas à manipulação de exceções? 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. O que se quer dizer por uma exceção estar vinculada a um manipulador de exceções? Qual é o problema com a vinculação de exceções a manipuladores da PL/I? Qual é o nome de todos os manipuladores de exceção do C++? Como as exceções podem ser explicitamente geradas em C++? Como as exceções são vinculadas a manipuladores em C++? Como um manipulador de exceções pode ser escrito em C++ de maneira que manipule qualquer exceção? Para onde vai o controle de execução quando um manipulador de exceções do C++ encerra sua execução? O C++ inclui exceções incorporadas? Qual é a classe-raiz de todas as classes de exceção Java? Qual é a classe-pai da maioria das classes de exceção Java definidas pelo usuário? Como um manipulador de exceções pode ser escrito em Java de maneira que manipule qualquer exceção. Qual é a diferença entre uma especificação throw C++ e uma classe throws Java? Como se pode desativar uma exceção Java? Qual é o propósito da cláusula Java finally? Em livros didáticos sobre as linguagens de programação PL/I e Ada, pesquise os conjuntos respectivos de exceções incorporadas. Faça uma avaliação comparativa das duas, considerando sua inteireza como sua flexibilidade. Em linguagens sem facilidades de manipulação de exceções, é comum que a maioria dos subprogramas inclua um parâmetro “error”, que pode ser fixado em algum valor que representa “OK” ou algum outro valor que representa “erro de procedimento”. Quais vantagens uma facilidade de manipulação de exceções linguísticas como a Ada tem sobre esse método? Compare as facilidades de manipulação de exceções do C++ com as da Java. Qual projeto, em sua opinião, é o mais flexível? Qual deles possibilita escrever programas mais confiáveis? SEBESTA, Robert W. Conceitos de Linguagens de Programação. 4ed. Porto Alegre: Bookman, 2000. 624 pág.