Anterior Proxima

Jantar dos Filósofos - Programação Paralela

Um programa concorrente especifica dois ou mais processos concorrentes, onde cada um executa um programa sequencial. Tais processos interagem por meio da comunicação, o que traz a necessidade de sincronização. O problema de sincronização mais conhecido é o do "Jantar dos Filósofos". Ele foi proposto por Dijkstra (1965) como um problema clássico de sincronização e possui a seguinte situação: 1) Cinco filósofos estão sentados ao redor de uma mesa circular para o jantar. 2) Cada filósofo possui um prato para comer macarrão. 3) Os filósofos dispõem de hashis e e cada um precisa de 2 hashis para comer. 4) Entre cada par de pratos existe apenas um hashi: Hashis precisam ser compartilhados de forma sincronizada. 5) Os filósofos comem e pensam, alternadamente. Eles não se atém a apenas uma das tarefas. 6) Além disso, quando comem, pegam apenas um hashi por vez: Se conseguir pegar os dois come por alguns instantes e depois larga os hashis. O problema é coordenar o uso dos hashi de maneira que nenhum filósofo fique com fome. Esse problema exemplifica muito bem muitas soluções e muitos problemas encontrados na programação concorrente. Pode facilmente ocorrer o deadlock se cada filósofo pegar o seu hashi da esquerda e se recusar a liberá-lo até ter comido. Pode ocorrer a inanição se dois filósofos conspirarem contra um terceiro. Na solução dada abaixo, é livre de impasse e permite o máximo paralelismo a uma número arbitrário de filósofos. Ela usa um arranjo de estado para controlar se um filsofo está comendo, pensando ou faminto. Um filósofo só pode mudar comer se nenhum de seus vizinhos estiverem comendo. O programa utiliza um arranjo de semáforos, um por filósofo, assim o filósofos famintos podem ser bloqueados se os garfos necessários estiverem ocupados. Comando para compilar no GCC: $ gcc -o jantar_dos_filosofos.o jantar_dos_filosofos.c -pthread Bom estudo.

Por: Uilian Ries


Criando um objeto em Ruby

Um pequeno exemplo de como criar um objeto em ruby.

Por: Luciano Alexandre de Farias Silva


Calcular Broadcast e IPs disponíveis

Fiz esse algoritmo para um projeto da faculdade, ele calcula o broadcast e mostra os IPs disponíveis. Estou começando agora, então ualquer dica será bem vinda.

Por: Lucas de souza montalvão


Contagem de caracteres

Este script é um básico passo para que você possa informar ao visitante de seu site quantos caracteres restam a serem digitados.

Por: Andre Cardoso


Compara igualdade entre arquivos

Comparar igualdade entre arquivos foi uma necessidade que surgiu ao corrigir exercícios de programação enviados pelo Moodle. Busquei por comandos que facilitassem a comparação recursiva de arquivos em uma pasta, mas não achei nada tão específico. Usei o diff, vimdiff, o cmp e o comm, até que resolvi montar o script que segue. O script serviu para mim e espero que a comunidade do VOL faça bom proveito.

Por: Jackson Klarosk


StrLen e StrCat

Um algoritmo simples, implementado em C, que procura fazer o que as funções strlen() e strcat() fazem através da utilização da biblioteca stdlib.h, sem utilização da biblioteca já pronta. Sugestôes de melhora, críticas etc são bem vindas!

Por: Alexandra Silva


Função Ano Bissexto

Um simples script mostrando a estrutura de uma função em C++, função essa que a partir de um ano digitado nos devolve se ele é bissexto ou não.

Por: Luciano Alexandre de Farias Silva


Gerador de PIS/PASEP em Python

Função em Python para gerar um número do PIS/PASEP válido.

Por: danilo



Anterior Proxima



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts