Algoritmo do Semaforo

Pessoal preciso de um HELP, mas um HELP enorme!!!
Eu tenho que fazer uma aplicação utilizando o algoritmo do semaforo (aqueles. algoritmos famosos, como o jantar dos filósofos, avestruz e outros)
Contudo, eu não tenho nem idéia de como eu utilizarei o algoritmo, digo uma usabilidade palpavél. Não sei se estou sendo claro.
Então queria que vcs me ajudassem dando idéia para tal tarefa! hehe

HAA e seu não fosse pedir muito se alguem tiver um exemplo bem básico e pudessem me ajudar, eu agradeceria!
Não quero um código completo não! somente a parte que usa o semaforo, pq o maldito do professor não dará nenhuma ajuda.

Agradeço desde ja
Abraço

Você poderia descrever este algoritmo, por gentileza ?

esta descrevendo certinho como ele funciona … eu conferi com a minha apostila da faculdade!!

seria um algoritmo que fica um tempo com uma cor (vermelha), depois fica outro tempo com amarela e depois fica com verde ?:

http://paginas.fe.up.pt/~eol/AIAD/0203/controladorsemaforo/index.htm

veja os links acima

cara o algoritmo ta ali no site que vc enviou como esta na sua apostila da faculdade

é só utilizar a logica com a sintaxe da linguagem que vc quer utilizar

vc conhece , melhor programa alguma linguagem de programação ?

É um algoritmo trabalhoso cara.
Para implementa-lo você vai ter que estudar filas, FIFO esas coisas cara.
Para ter uma idéia legal sobre isso lhe sujiro uma leitura.
Sistemas Operacionais Modernos - Tenembaum.
Nesse livro você vai entender como implementá-lo.

Mas garanto que não é fácil.
Pois para esse algoritmo funcionar você vai ter que ter jobs em uma fila.
Ixii, boas horas de estudo sobre SO.

Espero ter ajudado.
Abraço e boa sorte com o projeto.

[quote=paulo.rogeriobr]seria um algoritmo que fica um tempo com uma cor (vermelha), depois fica outro tempo com amarela e depois fica com verde ?:

http://paginas.fe.up.pt/~eol/AIAD/0203/controladorsemaforo/index.htm

veja os links acima[/quote]

não, não!!

não tem nada de fica verde, vermelho

cara, no começo do tópico eu disse que queria ajuda para achar uma usabilidade!

[quote=edu_fernandes]É um algoritmo trabalhoso cara.
Para implementa-lo você vai ter que estudar filas, FIFO esas coisas cara.
Para ter uma idéia legal sobre isso lhe sujiro uma leitura.
Sistemas Operacionais Modernos - Tenembaum.
Nesse livro você vai entender como implementá-lo.

Mas garanto que não é fácil.
Pois para esse algoritmo funcionar você vai ter que ter jobs em uma fila.
Ixii, boas horas de estudo sobre SO.

Espero ter ajudado.
Abraço e boa sorte com o projeto.[/quote]

Então cara vo pegar o Tanembaun! o complicado vai ser implementar msm, além de nem ter noção de como encaixar o algoritmo em algum assunto, o tempo meu ta curto para entrega!
Irei correr aqui!

Desculpe-me !! tem razao ! Li no wiki e vi que esse tipo de algoritmo é usado criando processos (thread) e gerenciando o numero de processos criados , depois vc pode usar esse algoritmo para bloquear e desbloquear os processos e a intençaõ é a utilização de mutex ou seja só um processo sendo executado por vez!
a usabilidade de mutex é realmente simples, mas vc tem que pensar em algo seu para utilizar. que funcione um processo por vez!

imagine um quarto de hotel ! quando está ocupado recebe um valor binario 1 e quando está desocupado recebe valor binario 0 em um programa de hotelaria, mas imagine um
hotel com 400 apartamentos !
esse é um exemplo que pensei agora sobre mutex

agora acho que vc deve pensar no seu
e me desculpe por nao ter prestado atenção direito no inicio do topico
pensei que vc queria um codigo, mas li novamente e vi que errei

espero ter ajudado com a usabilidade
do algoritmo

o algoritmo do semaforo, é apenas a ideia do metodo P e do metodo V…
onde o V libera o processo para uma outra thread, e o P bloqueia, até qua o processo acabe…

segue o metodo:

[code]
]package Semaforos;

public abstract class SemaforoBase implements Semaforo {

// Se valor < 0, abs(valor) � o tamanho da fina de P()
protected int valor = 0;

protected SemaforoBase() {
this(0);
}

protected SemaforoBase(int inicial) {
if (inicial < 0) throw new IllegalArgumentException(“inicial<0”);
valor = inicial;
}

public synchronized void P() {
valor–;
if (valor < 0) {
while (true) {
try {
wait();
break;
} catch (InterruptedException e) {
System.err.println
(“SemaforoBase.P(): InterruptedException, esperar novamente”);
if (valor >= 0) break;
else continue;
}
}
}
}

public synchronized void V() {
valor++;
if (valor <= 0) notify();
}

public synchronized int valor() {
return valor;
}

public synchronized String toString() {
return String.valueOf(valor);
}
}[/code]

procure entender o metodo, é simples…

vlw

[quote=paulo.rogeriobr]Desculpe-me !! tem razao ! Li no wiki e vi que esse tipo de algoritmo é usado criando processos (thread) e gerenciando o numero de processos criados , depois vc pode usar esse algoritmo para bloquear e desbloquear os processos e a intençaõ é a utilização de mutex ou seja só um processo sendo executado por vez!
a usabilidade de mutex é realmente simples, mas vc tem que pensar em algo seu para utilizar. que funcione um processo por vez!

imagine um quarto de hotel ! quando está ocupado recebe um valor binario 1 e quando está desocupado recebe valor binario 0 em um programa de hotelaria, mas imagine um
hotel com 400 apartamentos !
esse é um exemplo que pensei agora sobre mutex

agora acho que vc deve pensar no seu
e me desculpe por nao ter prestado atenção direito no inicio do topico
pensei que vc queria um codigo, mas li novamente e vi que errei

espero ter ajudado com a usabilidade
do algoritmo

[/quote]

O louco!! Para com isso meu querido, esse fórum é fera por isso! Todo mundo quer ajudar e poutz!! vou ser obrigado a furtar a sua idéia kkkk
não consigo pensar em nada melhor!

Abraço

[quote=Damiao Cunha]o algoritmo do semaforo, é apenas a ideia do metodo P e do metodo V…
onde o V libera o processo para uma outra thread, e o P bloqueia, até qua o processo acabe…

segue o metodo:

[code]
]package Semaforos;

public abstract class SemaforoBase implements Semaforo {

// Se valor < 0, abs(valor) � o tamanho da fina de P()
protected int valor = 0;

protected SemaforoBase() {
this(0);
}

protected SemaforoBase(int inicial) {
if (inicial < 0) throw new IllegalArgumentException(“inicial<0”);
valor = inicial;
}

public synchronized void P() {
valor–;
if (valor < 0) {
while (true) {
try {
wait();
break;
} catch (InterruptedException e) {
System.err.println
(“SemaforoBase.P(): InterruptedException, esperar novamente”);
if (valor >= 0) break;
else continue;
}
}
}
}

public synchronized void V() {
valor++;
if (valor <= 0) notify();
}

public synchronized int valor() {
return valor;
}

public synchronized String toString() {
return String.valueOf(valor);
}
}[/code]

procure entender o metodo, é simples…

vlw

[/quote]

vou começar a programar aqui … caso eu tenha duvidas vou postando para os amigos NINJAS me ajudarem!

Obrigado pessoal!

Obrigado pelo algoritmo!
Consegui fazer o que eu precisava.