Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C] Blocco a 2 fasi

  1. #1
    Utente di HTML.it L'avatar di matrics
    Registrato dal
    Jul 2004
    Messaggi
    502

    [C] Blocco a 2 fasi

    Ciao!
    Non riesco ad implementare in C il blocco a 2 fasi di un database:
    ho n lettori ed m scrittori, che accedono a delle risorse condivise x. Il blocco a 2 fasi deve garantire che non ci siano situazioni inconsistenti, ovvero se c'è uno scrittore che scrive su una risorsa nessuno può leggere o scrivere su tale risorsa parallelamente, E' possibile invece avere più lettori contemporaneamente.

  2. #2
    In genere per questo tipo di cose si usano i semafori e mutex. Quello che devi fare e' creare un sistema che consenta un solo processo scrittore alla volta e che consenta piu' processi lettori. I dettagli di implementazione dipendono dalle API che usi, e io non sono uno specialista di programmazione multithread comunque piu' o meno la cosa dovrebbe andare cosi':

    se sono scrittore:
    // questo si blocca finche' non ci non ne scrittori ne lettori
    // e' consentito un solo scrittore alla volta
    acquisisci mutex "scrittori"
    scrivi
    rilascia il mutex "scrittori"

    se sono lettore:
    // questo si blocca se ci sono scrittori ma entra se ci sono lettori
    // sono consentiti piu' lettori alla volta
    acquisici semaforo "lettori"
    leggi qualcosa
    riascia semaforo "lettori"

    Il vero nocciolo del problema e' implementare un sistema di acquisizione di mutex/semafori che sia sicuro dato che per ottenere mutex scrittori si deve controllare il semaforo lettori e per ottenere il semaforo lettori si deve controllare anche il mutex scrittori. L'implementazione dell'acquisizione di mutex e semafori devono a loro volta essere sezioni esclusive (protette da mutex).

    Non so se la stessa cosa si possa implementare con un singolo semaforo o se ci sono api che facilitano le cose, non lo escluderei del tutto.

    Ciao

  3. #3
    Utente di HTML.it L'avatar di matrics
    Registrato dal
    Jul 2004
    Messaggi
    502
    Originariamente inviato da programmerscafe
    In genere per questo tipo di cose si usano i semafori e mutex. Quello che devi fare e' creare un sistema che consenta un solo processo scrittore alla volta e che consenta piu' processi lettori. I dettagli di implementazione dipendono dalle API che usi, e io non sono uno specialista di programmazione multithread comunque piu' o meno la cosa dovrebbe andare cosi':

    se sono scrittore:
    // questo si blocca finche' non ci non ne scrittori ne lettori
    // e' consentito un solo scrittore alla volta
    acquisisci mutex "scrittori"
    scrivi
    rilascia il mutex "scrittori"

    se sono lettore:
    // questo si blocca se ci sono scrittori ma entra se ci sono lettori
    // sono consentiti piu' lettori alla volta
    acquisici semaforo "lettori"
    leggi qualcosa
    riascia semaforo "lettori"

    Il vero nocciolo del problema e' implementare un sistema di acquisizione di mutex/semafori che sia sicuro dato che per ottenere mutex scrittori si deve controllare il semaforo lettori e per ottenere il semaforo lettori si deve controllare anche il mutex scrittori. L'implementazione dell'acquisizione di mutex e semafori devono a loro volta essere sezioni esclusive (protette da mutex).

    Non so se la stessa cosa si possa implementare con un singolo semaforo o se ci sono api che facilitano le cose, non lo escluderei del tutto.

    Ciao
    La mia idea è uguale alla tua
    Non devo utilizzare librerie particolari, solo i mutex, eventualmente variabili di condizione e segnali

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.