leitores e escritores
O problema dos Leitores e Escritores trata o caso em que diversas threads querem acesso ao mesmo espaço de memória. Porém existem algumas regras para regular esse acesso de threads que leem e que escrevem:
→ Durante o tempo em que um processo realiza escrita, nenhum outro pode obter acesso a memória.
→ Enquanto um processo realiza leitura, outros podem ter acesso a memoria compartilhada, porém somente se forem processos leitores.
Existem diferentes soluções para o problema, em uma delas o processo escritor possui maior prioridade sobre os demais, podendo acessar a memoria compartilhada mesmo que outros processos leitores estejam aguardando.
Em outra solução diferente, os processos leitores tem prioridade sobre os outros e somente quando terminarem de acessar a memoria e consumir seus dados o acesso é liberado aos processos escritores. Nessa ultima existe risco de algum processo escritor sofrer de inanição, pois enquanto um processo leitor estiver ocupando o espaço compartilhado de memoria outros processos leitores podem chegar e impedir que processos escritores acessem esse espaço.
É possível utilizar essa mesma solução com algumas mudanças. Com a utilização de funções que geram valores randômicos representando o tempo em que os processos leitores leem dados da memoria, e outro espaço de tempo em que utilizam os dados lidos para realizar alguma tarefa. E no caso dos escritores a parcela de tempo em que pensam no que irão escrever e outra parcela de tempo em que ocupam o espaço de memória escrevendo.
Dessa forma cada processo tem um tempo específico para realizar tarefas na seção critica não impedindo que outros processos utilizem os recursos, evitando a inanição. O problema é tratado utilizando semáforos que controlam o acesso a seção critica e garantindo a exclusão mútua.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#define TRUE 1
sem_t mutex;