[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [mac438] ep1 sem variável de condição



Na verdade acho que é uma duvida bem pertinente, já que ela tem tudo a ver com a
maneira como o ep será implementado.

É o seguinte, "variaveis de condicao" é o nome que se dá especificamente a
variaveis que giram em torno de espera/sinalizacao, contudo, se formos levar em
conta o significado da expressao, descontextualizado do jargao, vc está certo.
Se vc usar uma variável para _condicionar_ alguma coisa entao vc está usando
variáveis de condicao.

Contudo, minha opiniao pessoal é que convém discutir o assunto e pensar a
respeito, mas nao convém usar a expressao para mais de uma situacao para evitar
ambiguidades e facilitar a comunicacao. Por isso, eu opto por utilizar a
expressao "variaveis de condicao" exclusivamente dentro do contexto de wait/signal.

O uso de sleeps pode até funcionar na prática, mas não é um jeito bom por (pelo
menos) dois motivos. O primeiro é que ele NAO garante o acesso exclusivo ao
recurso. Se o sleep for suficientemente grande, pode funcionar quase sempre, mas
não há garantias. Essa solucao ESTA ERRADA. Isso não é controle de concorrencia,
é apenas minimizar as chances de have-la. O que nos leva ao segundo motivo, nós
queremos que  o programa execute o mais rapido possivel, se vc usar um sleep de
1 segundo, com 1000 recursos produzidos, o minimo tempo que seu programa irá
executar é 1000s = 16min40s o que é inadmissivel, ainda mais para um programa
sem garantias de corretude na execucao.

(Diga-se de passagem que teremos um minimo de 30 eps em duas linguagens, ou seja
60 testes de pelo menos 16min40 cada um. Isso me da um minimo de 16horas e 40
minutos de execucao de uma das duas partes dos eps de vcs.)

Eu nao posso ser muito explicito em como implementar o ep sem condvars, mas eu
dou uma keyword: "Busy Waiting".

Na verdade a "pegadinha" das condvars esta em compara-la com o "Busy Waiting" e
nao com o sleep. O "Busy waiting" é mais ineficiente que as condvars, mas pelo
menos fornece garantias e ainda assim é muito mais eficiente que sleeps.

A grande vantagem das condvars é que elas nao ocupam tempo de processador, cabe
a vcs medir isso na pratica.

Acho que é isso...

T+
Guioc



Quoting "André T. Kowaltowski" <kowal@linux.ime.usp.br>:

> Olá,
> 
> Acho que a minha dúvida não é muito pertinente. Mas como ninguém pra quem
> eu
> tenha perguntado conseguiu me dar algum motivo contra aqui vai:
> 
> Na implementação do ep1 sem variáveis de condição a execução do programa
> sempre
> falha pq não como controlar se o produtor já produziu para o consumidor pegar
> um
> recurso novo ou se o consumidor já consumiu para o produtor não sobreescrever
> um
> recurso não utilizado. Se tentarmos fazer este controle estaremos
> condicionando
> o recurso e portanto usando implicita ou explicitamente variáveis de
> condição.
> Esta afirmação está correta?
> Eu acho que a única forma de controlar sem condicionar é usando sleeps, mas
> acho
> que não há como garantir no caso geral de qq número de consumidores...
> Estou
> falando alguma grande besteira?
> 
> Obs.: Eu acho que o motivo de se implementar essa versão sem variáveis de
> condição é justamente entender a necessidade delas... É pegadinha do
> professor?
> 
> 
> Bom fim de semana,
> André.
> 
> P.S.: Se eu estiver absolutamente errado não sou o único: ninguém para quem
> eu
> tenha perguntado me disse que conseguiu controlar sem condicionar (a não ser
> com
> sleeps...).
> 
> -- 
> ATK
> 
> 
>