int block_write(int sk): funzione pubblica che aggiorna il contenuto della copia globale del blocco con quello della copia locale. La funzione riceve l'id del blocco interessato dal client identificato da sk, trova il blocco richiamando la find_block, trova il client associato al blocco richiamando la find_client, effettua un controllo sulla validità della copia locale e manda il valore della variabile booleana valid al client. Se la copia locale risulta invalida termina le operazioni, altrimenti aggiorna il contenuto della copia globale del blocco con quello della copia locale inviatagli dal client, rende la copia locale invalida richiamando la change_valid, invia al client il segnale di sbloccarsi sulla wait richiamando la client_unblock. Tutte le operazioni sul blocco sono effettuate in mutua esclusione. La funzione ritorna 1 in caso di successo e -1 in caso di errore.
|