Salve a tutti, sono nuovo del forum e avrei bisogno di aiuto per un progetto da realizzare usando il c. Il testo, composto da 2 parti, è il seguente:
“1. Realizzare una piccola libreria di funzioni che, utilizzando le chiamate di sistema IPC, permetta a più processi di sincronizzarsi per:
- richiedere l'allocazione di un numero k di risorse da un pool di N risorse, tutte dello stesso tipo, disponibili inizialmente (dove N è una costante dichiarata in un opportuno file della libreria). L'allocazione deve avvenire in modo atomico, ovvero: se tutte le k risorse sono disponibli, vengono assegnate, altrimenti non ne viene allocata nessuna e il processo viene sospeso
- restituire m risorse.
Scrivere programmi opportuni per illustrare l'utilizzo e il funzionamento della libreria.
2. Realizzare poi una analoga libreria per un processo con thread multipli piuttosto che per processi multipli. Cioè una piccola libreria di funzioni che, utilizzando le chiamate della libreria Pthreads, permetta a più threads di sincronizzarsi per richiedere in mutua esclusione, in modo atomico, un numero k di risorse da un pool di N risorse, tutte dello stesso tipo, disponibili inizialmente (dove N è una costante dichiarata in un opportuno file della libreria), e per restituire m risorse.”
ho dato un po' un'occhiata in giro e ho provato a buttar giù qualcosa.....solo che nella mia testa la vedo una cosa ancora un po' troppo teorica.....
Qui c'è quello che ho fatto finora:
Codice:
#include "semfun.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#define N 10 // num risorse
#define NP 10 // NP numero di processi
semaforo mutex initial 1;
semaforo priv[NP] initial 0;//semafori proc
int risorse= N; // cont ris
int n_blocc=0; //cont processi bloccati
boolean proc_bloccati[NP]; //definiz proc bloccati
allocazione(int proc, int k)
{
down(mutex);
if (risorse<k)
{
n_blocc++;
proc_bloccati[proc]=true; //processo proc bloccato
up(mutex);
down(priv[proc]);
n_blocc--;
proc_bloccati[proc]=false; //processo proc sbloccato
}
risorse=risorse-k; //alloca k risorse
up(mutex);
}
restituzione()
{
int j;
down(mutex);
risorse=risorse+k;
if (risorse>=k && n_blocc>0)
{
j=0;
while (proc_bloccati[j]==false)// scegli processo da attivare
j++;
up(priv[j]);
}
else
up(mutex);
}
potrebbe andare bene come base???e per mostrarne l'utilizzo come posso fare???scusate ma sono alquanto confuso....
Se qualcuno avesse le idee più chiare di me e sapesse darmi qualche indicazione per andare avanti o correggere quello che ho fatto gliene sarei grato.
Grazie a tutti!!!