colegas de graduacao.Explicacoes a parte, vamos ao que interessa.Faca o download do pacote Pthreads (Posix Threads) aqui. Este pacote permite a voce usar varias bibliotecas nativas do C padrao.Entre elas semaphore.h ,pthread.h e outras relativas a programacao concorrente. Apos baixar, instale o pacote, dando um duplo-clique no arquivo e seguindo as instrucoes, se houver.Apos a instalacao, no menu TOOLS > PACKAGE MANAGER ( FERRAMENTAS > PACKAGE MANAGER em portugues ) o pacote deve aparecer, como na ilustracao abaixo:Com o pacote instalado, precisamos informar ao programa de link edicao do Dev-C que estamos usando uma biblioteca externa a padrao. Para fazer isto, va ate o menu TOOLS e em COMPILER OPTIONS marque a caixa Add theese commands to the linker command line insira o comando " -lpthreadGC2 "(Sem aspas) na caixa logo abaixo. Pressione OK.( Se a sua IDE estiver em Portugues, a sequencia e : Ferramentas > Opcoes do Compilador >Marque a opcao Adicionar estes comandos a linha de comando do linker > Na caixa abaixo insira "-lpthreadGC2" (Sem aspas)).Feito isto voce esta apto a comecar a usar as bibliotecas. No entanto, as funcoes para manipular os semaforos sao um pouco diferentes das funcoes aprendidas durante a aula de Sistemas Operacionais.Para Criar um semaforo, utilizamos o tipo de dado sem_t. Ex:#include <semaphore.h>sem_t meuSemaforo;Para Inicializar um semaforo, utilizamos a funcao sem_init, que recebe como parametro uma referencia(&) ao semaforo criado.Em seguida e passado o valor da variavel pshared, que se for um numero positivo, permite que o semaforo seja compartilhado por outros processos.E finalmente o valor inicial do nosso semaforo.(No exemplo do consumidor/produtor, os semaforos eram inicializados com uma atribuicao.Neste metodo, precisamos executar a funcao sem_init, a fim de inicializar a variavel interna)Ex:sem_init (&meuSemaforo,0,1); (semaforo binario, nao compartilhado entre processos. E geralmente utilizado como o semaforo de Exclusao Mutua (mutex)).sem_init (&meuSemaforo,0,10);(semaforo inteiro, nao compartilhado entre processos. E geralmente utilizado como contador).Obs : Como utilizaremos o modelo de threads concorrentes , nao compartilhamos os semaforos com outros processos. Caso utlilizassemos o modelo de processos concorrentes, teriamos que setar a propriedade pshared para 1)Para utilizar a funcao P(s), descrita no conteudo de sistemas operacionais, utilizamos a equivalente sem_wait, que recebe como parametro a referencia(&) para o semaforo. Esta operacao testa se o semaforo e maior que 0. Se for, ela decrementa o valor do semaforo e entra no codigo da Regiao Critica.Ex:sem_wait(&meuSemaforo);Para utilizar a funcao V(s), descrita no conteudo de sistemas operacionais, utilizamos a equivalente sem_post, que recebe como parametro a referencia(&) para o semaforo. Esta operacao quando executada, incrementa o valor do semaforo, e abre o sinal para que outros processos/threads executem a sua Regiao Critica.Ex:sem_post(&meuSemaforo);Bom, com estas informacoes ja daria para implementar o codigo do produtor/consumidor sem problemas.Porem, ainda nao implementamos programacao multithread para poder testar nossos codigos. Para isto, utilize a biblioteca <pthread.h>.O tipo de dado para se declarar uma thread e pthread_t. Ex:#include <pthread.h>pthread_t minhaThread;Para criar e inicializar a thread, utilizamos a funcao pthread_create que contem 4 argumentos que, devido a sua complexidade, serao tratados individualmente. Ex:pthread_create(&minhaThread, NULL, minhaFuncao , (void *) &meuArgumento);O primeiro argumento e uma referencia(&) a thread previamente