Exercise in C - Semaforos

Asked

Viewed 164 times

0

Hello, I’m doing an exercise in C but I found some difficulties, the goal is to use the lib #include <pthread. h> when using the code of this template

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <pthread.h>

#define TAM_BUFFER 5

// Vari�veis de controlhe
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; // controla entrada na regi�o cr�tica
pthread_cond_t cheio = PTHREAD_COND_INITIALIZER; // quantos slots est�o ocupados no buffer
pthread_cond_t vazio = PTHREAD_COND_INITIALIZER; // quantos slots est�o vazios no buffer

typedef struct s_buff {
    int buff_dados[TAM_BUFFER]; // Buffer de itens
    int fim;            // Indica a posi��o do �ltimo �tem do buffer
                        // (pode funcionar como uma pilha)
} Buffer;

void *produtor(void *buffer)
{
    /* Escrever c�digo do Produtor */
    /* Deve imprimir eventos, indicando n�mero do thread:
       1. "[P - <num do thread>] Produzindo item x"
       2. "[P - <num do thread>] Armazenando item x no buffer"
       3. Alternativo -> "[P - <num do thread>] Buffer cheio. Aguardando ..."
       4. Alternativo -> "[P - <num do thread>] Buffer liberado. Continuando ..."
     */
}

void *consumidor(void *buffer)
{
    /* Escrever c�digo do Consumidor */
    /* Deve imprimir eventos, indicando n�mero do thread:
       1. "[C - <num do thread>] Retirando item x do buffer"
       2. "[C - <num do thread>] Consumindo item x"
       3. Alternativo -> "[C - <num do thread>] Buffer vazio. Aguardando ..."
       4. Alternativo -> "[C - <num do thread>] Novos itens produzidos. Continuando ..."
     */

}

int main()
{
    // Buffer compartilhado
    Buffer buffer;
    buffer.fim = 0;

    /* Refer�ncias para Produtor e Consumidor */
    pthread_t prod_thread;
    pthread_t cons_thread;

    /* Cria thread produtora */
    printf("Criando Produtor\n");
    if(pthread_create(&prod_thread, NULL, produtor, &buffer)) {
        printf("Erro criando Produtor\n");
        return 1;
    }

    /* Cria thread consumidora */
    printf("Criando Consumidor\n");
    if(pthread_create(&cons_thread, NULL, consumidor, &buffer)) {
       printf("Erro criando Consumidor\n");
        return 1;
    }

    pthread_join(prod_thread, NULL);
    printf("Finalizando!\n");
    return 0;
}


I’d like to know how to do.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.