rendered paste body#include <stdio.h>#include <stdlib.h>#include "fila.h"#include "fila.c"#include "dados.h"#include "dados.c"#include "empilha.c"void produtor(int p);void consumidor(void);void down(int s);int up(int s);void insere_item(int p);void remove_item(void);int cheio=0,vazio=3,mutex=1;int main(void){tipoFila fila;tipoDados x;char op;int aprod;while(1){//clsMenu();printf("\nP para produzir, C para consumir, M para mostrar estado\n");scanf("%c", &op);switch(op){ case 'p': printf("\nDigite o valor a produzir\n"); scanf("%d", &aprod); produtor(aprod); // cls(); break; case 'c': printf("\nTentando consumir...\n"); consumidor(); // cls(); break; case 'm': exibe(); break; /*case 'f': imprimefila();*/ default: printf("nao tem essa opcao"); }}}/*// envia e lista os dados da filainicializa(&fila);printf("Introduza uma sequencia de caracteres:\n");while(!leDados(&x)){adiciona(&fila,x);}printf("Sequencia lida:\n");while(!filaVazia(&fila)){retira(&fila,&x);escreveDados(x);}printf("\n");exit(0);}*/void produtor(int p){ down(vazio);down(mutex);if(vazio != 0){insere(p);exibe();}else { //insere na fila}up(mutex);cheio = up(cheio); }void consumidor(void){down(cheio);down(mutex);if(cheio != 0){remove_item();}else { //coloca na fila }up(mutex);up(vazio);}}void down(int s){ if(s > 0) { s=s-1; } else{ //sleep(); printf("dorme"); s=0; }}int up(int s){ s=s+1; return s;}void insere_item(int p){}void remove_item(void){remover();}