Risultati da 1 a 6 di 6

Discussione: sincronizzazione processi e thread

  1. #1
    New Member
    Data Registrazione
    28-12-2005
    Messaggi
    7

    sincronizzazione processi e thread

    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.”

    Se qualcuno avesse le idee più chiare di me e sapesse darmi qualche indicazione per partire gliene sarei grato.
    Grazie a tutti!!!

  2. #2
    Super Member L'avatar di hannibal
    Data Registrazione
    18-02-2003
    Località
    Cesena - FC
    Messaggi
    510
    Per affrontare questo tipo di problema è necessario avere qualche conoscenza delle tecniche di sincronizzazione di processi e thread. Mi riferisco in particolare a semafori, monitor e message passing: le principali modalità che consentono la sincronizzazione e che permettono l'esistenza di operazioni cosiddette "atomiche". Hai idea di cosa siano queste cose?

    In seconda istanza, le IPC (interprocess communication libraries) forniscono un set di funzioni che consentono l'implementazione delle tecniche che ho appena citato. Per utilizzarle in C devi partire dall'inclusione della libreria
    Codice:
    #include <ipc.h>
    .

    Ti riporto un paio di link che contengono alcune spiegazioni ed esempi sull'argomento: primo, secondo.

    Questo dovrebbe bastare a farti un'idea generale sull'argomento. Se poi hai domande più specifiche...

  3. #3
    New Member
    Data Registrazione
    28-12-2005
    Messaggi
    7
    grazie per le info.....ho dato un po' un'occhiata in giro e ho iniziato a buttar giù qualcosa.....solo che nella mia testa la vedo una cosa ancora un po' troppo teorica....potrebbe andare bene come base???e per mostrarne l'utilizzo come posso fare???scusate ma, se non si fosse capito, sono alquanto confuso.....
    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);
    }
    grazie ancora per la pazienza!!!!

  4. #4
    New Member
    Data Registrazione
    30-10-2005
    Messaggi
    4
    cari ragazzi buonasera, ho un piccolo problema che spero con il vostro aiuto di risolvere.
    Ho sempre usato una risol.di 1028x1024 ma da qualche giorno l'immagine che uso sul desktop anche quella originale di xp vedo la vedo pixellata.Come mai ?
    Grazie a tutti

  5. #5
    Super Member L'avatar di hannibal
    Data Registrazione
    18-02-2003
    Località
    Cesena - FC
    Messaggi
    510
    Citazione Originariamente Scritto da byke
    cari ragazzi buonasera, ho un piccolo problema che spero con il vostro aiuto di risolvere.
    Ho sempre usato una risol.di 1028x1024 ma da qualche giorno l'immagine che uso sul desktop anche quella originale di xp vedo la vedo pixellata.Come mai ?
    Grazie a tutti
    Ciao e benvenuto sul forum ma perchè hai postato qui la tua domanda?

  6. #6
    Super Member L'avatar di hannibal
    Data Registrazione
    18-02-2003
    Località
    Cesena - FC
    Messaggi
    510
    Citazione Originariamente Scritto da zzzzzz
    grazie per le info.....ho dato un po' un'occhiata in giro e ho iniziato a buttar gi&#249; qualcosa.....solo che nella mia testa la vedo una cosa ancora un po' troppo teorica....potrebbe andare bene come base???e per mostrarne l'utilizzo come posso fare???scusate ma, se non si fosse capito, sono alquanto confuso.....
    Il codice che hai postato tu &#232; alla base della tecnica dei semafori. Quello che invece mi pare di capire dal testo del tuo problema &#232; che devi utilizzare le tecniche di comunicazione tra processi e thread per ottenere la sincronizzazione. Tra le tre modalit&#224; di cui avevo parlato nell'altro post devi quindi utilizzare quella del message passing.
    Nel primo link che ti ho segnalato c'&#232; il codice per realizzare lo scambio di messaggi tra due processi.
    Un'altra cosa che ti pu&#242; servire &#232; sapere come funziona la creazione e gestione di thread: qui oltre a trovare altro materiale sulle IPC trovi anche una panoramica sull'uso dei thread in C.

    Il mio consiglio per&#242; resta quello, nonostante tutto, di chiarire bene la parte teorica prima di affrontare il codice. Per esempio, hai chiara la differenza tra semafori, monitor e massage passing? Sai come sincronizzare due processi utilizzando il message passing? Sai che differenza c'&#232; tra thread e processi e come utilizzarli? ... Spesso sembra che studiare la teoria sia solo una perdita di tempo, ma ti assicuro che chiarita quella la parte di implementazione &#232; molto meno problematica!

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •