· Andrea Pollini · materiale didattico · 3 min read

esercizi gestione della sincronizzazione

Esercizi sulla gestione della sincronizzazione per i thread

Esercizi sulla gestione della sincronizzazione per i thread

Esercizi sulla sincronizzazione

La sincronizzazione è una parte importante della programmazione concorrente in Python. In questa sezione troverai 20 esercizi sulla sincronizzazione, divisi in tre livelli di difficoltà crescente.

Livello 1: Basics

  1. Conta fino a 10: Crea due thread che stampano i numeri da 1 a 10. Utilizza il modulo threading per creare e avviare i thread.
  2. Somma di numeri: Crea due thread che sommano i numeri da 1 a 100. Utilizza il modulo threading per creare e avviare i thread, e utilizza una variabile condivisa per memorizzare il risultato finale.
  3. Timer: Crea un thread che stampa l’ora corrente ogni secondo. Utilizza il modulo threading e la funzione time.sleep() per implementare il timer.

Livello 2: Locks

  1. Conteggio condiviso: Crea due thread che incrementano una variabile condivisa. Utilizza un lock per evitare race conditions.
  2. Accesso condiviso a una risorsa: Crea due thread che accedono a una risorsa condivisa (ad esempio, un file). Utilizza un lock per garantire l’accesso esclusivo alla risorsa.
  3. Protezione di una lista condivisa: Crea una lista condivisa e due thread che aggiungono elementi alla lista. Utilizza un lock per proteggere la lista dalle modifiche simultanee.

Livello 3: Condizioni e eventi

  1. Produttore/consumatore: Crea due thread, uno che produce numeri e l’altro che li consuma. Utilizza una coda condivisa e le condizioni per sincronizzare i thread.
  2. Barriera di sincronizzazione: Crea tre thread che stampano un messaggio in ordine sequenziale. Utilizza una barriera di sincronizzazione per garantire che i thread stampino il messaggio nella giusta sequenza.
  3. Eventi di terminazione: Crea due thread e utilizza gli eventi per gestire la loro terminazione. Il primo thread deve attendere che il secondo termini prima di terminare a sua volta.

Livello 4: Sincronizzazione avanzata

  1. Semafori: Crea tre thread che accedono a una risorsa condivisa. Utilizza i semafori per controllare l’accesso alla risorsa e prevenire race conditions.
  2. Lock con timeout: Modifica l’esercizio 4 del livello 2 in modo da utilizzare un lock con timeout per evitare deadlocks.
  3. Thread pool: Crea una pool di thread e utilizza le condizioni per gestire i task in ingresso e in uscita dalla pool.

Livello 5: Mix

  1. Produttore/consumatore con semafori: Modifica l’esercizio 1 del livello 4 in modo da utilizzare i semafori invece delle condizioni per sincronizzare i thread.
  2. Barriera di sincronizzazione con eventi: Modifica l’esercizio 3 del livello 3 in modo da utilizzare le barriere di sincronizzazione invece degli eventi per gestire la terminazione dei thread.
  3. Lock condiviso tra processi: Crea due processi che accedono a una risorsa condivisa. Utilizza un lock condiviso tra i processi per garantire l’accesso esclusivo alla risosa.
  4. Sincronizzazione con file di lock: Crea due thread che scrivono su un file condiviso. Utilizza un file di lock per sincronizzare l’accesso al file e prevenire race conditions.
  5. Sincronizzazione con pipe: Crea due processi che comunicano attraverso una pipe. Utilizza le pipe per sincronizzare i processi e scambiare dati tra di loro.
    Back to Blog

    Related Posts

    View All Posts »
    TPSIT: Proposta per un percorso moderno

    TPSIT: Proposta per un percorso moderno

    Da quando sono docente ho sempre insegnato la materia di TPSIT, Tecnologie e Progettazione di Sistemi Informatici e di telecomunicazioni. Ho sempre cercato di proporre un approccio moderno, cercando di coinvolgere gli studenti in progetti reali, con l'obiettivo di farli appassionare a questa materia, che è molto importante per il loro futuro lavorativo. In questo articolo propongo un percorso moderno, che ho sperimentato con successo, e che può essere utilizzato da altri docenti per proporre un percorso simile ai loro studenti.

    Qual è la differenza tra processo e thread?

    Qual è la differenza tra processo e thread?

    un processo è un'istanza di un programma in esecuzione con il proprio spazio di indirizzamento e risorse, mentre un thread è un sottoprocesso all'interno di un processo principale che condivide lo stesso spazio di indirizzamento e le risorse con il processo principale.

    le user story

    le user story

    capiamo in modo facile l'utilità e le caratteristiche delle user story