Buscar

Laboratorio 02 java

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Curso: Bacharelado	em	Sistemas	de	Informação	 Série: 6ª/7ª Turma: 	 Nota: 
Disciplina: Programação	Concorrente	 Turno: 	 
Professor: Diego	Silva	 Data: ___/___/______	
Aluno(a): 	 RA: 	
 
Exercícios Práticos – Laboratório 02 
 
Introdução	
A	comunicação	entre	threads	é	normalmente	um	requisito	das	aplicações	concorrentes.	
	
Threads	em	um	mesmo	programa	podem	 referenciar	 variáveis	 globais	ou	 chamar	métodos	 sobre	um	objeto	
compartilhado,	dependendo	das	regras	de	nomeação	e	escopo	da	 linguagem	de	programação	utilizada.	Cabe	
ao	programador	definir	as	variáveis	e	objetos	compartilhados	que	serão	necessários	para	a	comunicação.	
	
O	 objetivo	 deste	 Laboratório	 é	 avaliar	 a	 operação/execução	 de	 programas	 concorrentes	 que	 usam	 variáveis	
compartilhadas	 como	 mecanismo	 de	 comunicação	 entre	 threads.	 Usaremos	 a	 linguagem	 Java	 para	 os	
exemplos.	
	
Para	cada	atividade,	siga	o	roteiro	proposto	e	responda	a	todas	as	questões	colocadas	antes	de	passar	para	a	
próxima	atividade.	
	
Atividade	1	
Objetivo:	 Mostrar	 um	 exemplo	 simples	 de	 programa	 com	 uma	 variável	 compartilhada	 entre	 threads,	 e	 os	
possíveis	efeitos	indesejáveis	do	acesso	compartilhado.	
	
Roteiro:	
1.	Abra	o	arquivo	Ex01.java	 e	entenda	o	que	ele	 faz.	Qual	 saída	é	esperada	para	o	programa	 (valor	 final	da	
variável	s)?	
	
2.	Execute	o	programa	Ex01.java.	
	
3.	Execute	o	programa	várias	vezes	e	observe	os	resultados	impressos	na	tela.	
	
4.	Os	valores	impressos	foram	sempre	o	valor	esperado?	Se	não,	por	que	isso	aconteceu?	
	
5.	 Altere	 o	 número	 de	 threads	 no	 programa	 para	 1	 (QTD_THREADS	 1),	 compile	 e	 execute	 novamente	 o	
programa	várias	vezes.	Os	valores	impressos	foram	sempre	o	esperado?	Por	quê?	
	
Relatório	da	atividade:	Em	um	arquivo	.txt	descreva	as	respostas	das	questões	colocadas	e	mostre	os	diferentes	
resultados	obtidos	nas	execuções	realizadas.	
	
Atividade	2	
Objetivo:	Mostrar	o	comportamento	não-determinístico	de	um	programa	com	três	threads.	
	
Roteiro:	
1.	Abra	o	arquivo	Ex02.java	e	entenda	o	que	o	programa	faz.	Quais	são	os	possíveis	valores	finais	da	variável	y?	
É	possível	y	terminar	com	valor	3	(combinação	binária	dos	números	1	e	2)?	Por	quê?	
	
	
Anhanguera Educacional 
Taguatinga – FACNET 
 
	
2.	 Execute	o	programa	várias	 vezes	e	observe	os	 resultados	 impressos	na	 tela.	Altere	o	 código	do	programa	
modificando	a	ordem	em	que	as	threads	são	criadas	e	repita	as	execuções.	
	
Relatório	da	atividade:	Em	um	arquivo	.txt	descreva	as	respostas	das	questões	colocadas	e	mostre	os	diferentes	
resultados	obtidos	nas	execuções	realizadas.	
	
Atividade	3	
Objetivo:	Projetar	e	implementar	uma	aplicação	concorrente	que	usa	memória	compartilhada	para	permitir	a	
interação	entre	as	diferentes	threads	da	aplicação.	
	
Descrição	do	problema:	A	aplicação	deve	implementar	dois	comportamentos	distintos:	
(A)	produzir	dados	que	são	depositados	em	uma	área	comum;		
(B)	consumir	os	dados	gerados	retirando-os	da	área	comum.		
Para	cada	comportamento	descrito,	 implemente	uma	 thread	dentro	da	aplicação.	As	 restrições	do	problema	
são:	
(i)	 a	 thread	 produtora	 só	 pode	 incluir	 dados	 em	 slots	 vazios	 da	 área	 comum	 (i.e.,	 não	 pode	 ocorrer	
sobrescrita	de	dados	que	ainda	não	foram	consumidos);	
(ii)	a	thread	consumidora	não	pode	retirar	um	dado	de	um	slot	vazio;	
(iii)	os	dados	devem	ser	retirados	na	mesma	ordem	em	que	foram	inseridos,	i.e.,	o	primeiro	dado	a	ser	
inserido	deve	ser	o	primeiro	dado	a	ser	retirado/consumido.	
	
Roteiro:	
1.	Projete	uma	solução	para	a	aplicação	com	uma	thread	produtora	e	uma	thread	consumidora.	Use	como	área	
comum	de	depósito	de	dados	um	buffer	de	tamanho	N.	
	
2.	Planeje	como	testar/validar	a	sua	aplicação,	de	que	maneira	será	possível	verificar	que	a	solução	proposta	
atende	ou	não	as	restrições	do	problema.	
	
3.	Implemente	e	teste	a	solução	proposta.	
	
4.	Estenda	a	solução	anterior	considerando	a	possibilidade	de	ter	um	número	variável	de	threads	produtoras	e	
consumidoras.	
	
Relatório	da	atividade:	Em	um	arquivo	.txt	descreva	o	projeto	da	solução	e	dos	testes.		
	
Acrescente	 seu	nome	e	 numero	de	matrıcula	 no	 relatorio	 gerado	 e	 o	 envie	 no	moodle,	 junto	 com	o	 codigo	
fonte	do	programa	implementado	nessa	atividade.

Outros materiais