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!!!