Il 0% ha trovato utile questo documento (0 voti)
4 visualizzazioni3 pagine

C# 15.2.2thread ProprietàConStati

Il documento descrive gli stati dei thread in C#, inclusi Unstarted, Running, Stopped, AbortRequested e WaitSleepJoin, evidenziando come i thread possano passare tra questi stati. Viene inoltre spiegata la differenza tra thread foreground e background, con indicazioni su come gestire la loro priorità. Infine, si discute il meccanismo di scheduling preemptive utilizzato dai sistemi operativi per gestire i thread.

Caricato da

alessandro121003
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
4 visualizzazioni3 pagine

C# 15.2.2thread ProprietàConStati

Il documento descrive gli stati dei thread in C#, inclusi Unstarted, Running, Stopped, AbortRequested e WaitSleepJoin, evidenziando come i thread possano passare tra questi stati. Viene inoltre spiegata la differenza tra thread foreground e background, con indicazioni su come gestire la loro priorità. Infine, si discute il meccanismo di scheduling preemptive utilizzato dai sistemi operativi per gestire i thread.

Caricato da

alessandro121003
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 3

PROPRIETA'DIAGRAMMA DEGLI STATI 15.2.

2 C# Thread

15.2.2 C# THREAD PROPRIETA'DIAGRAMMA DEGLI STATI

I thread C# possono trovarsi in vari stati i cui nomi sono definiti dal linguaggio. Ecco i
principali:

1. Unstarted. E' lo stato di new (non è stato ancora chiamato il metodo Start())

2. Running. Rappresenta gli stati Ready + Running

3. Stopped. Corrisponde a Terminated (terminato).

4. AbortRequested. Sul thread è stato invocato il metodo Abort(). Lo stato successivo


dipende dai metodi chiamati in seguito.

5. WaitSleepJoin. Il thread è Blocked (bloccato) a causa di una Sleep() o di una Join().

WaitSleepJoin
Abort

sbloccato bloccato
Abort
Unstarted Running AbortRequested
Start
ResetAbort
terminato
terminato
Stopped

Unstarted:

dopo l'operazione di costruzione dell'oggetto Thread:


Thread th = new Thread(new ThreadStart(codice.Attività));

Running:

dopo la chiamata del metodo Start().

Un thread in stato runnable può essere o meno in esecuzione. Le specifiche C# non


distinguono tra gli stati di ready e running.

E' compito del S.O. assegnare la CPU ai thread. L'algoritmo di scheduling utilizzato è di
tipo preemptive (Round-Robin con code a priorità). Si parla di schedulazione preemptive.

WaitSleepJoin:

un thread diventa bloccato quando:

alessandra peroni Pag. 1 di 3


PROPRIETA'DIAGRAMMA DEGLI STATI 15.2.2 C# Thread

• chiama Sleep() o la Join()

• tenta di acquisire il lock su un oggetto già detenuto da un altro thread (lock)

• è in attesa (Wait()) di un certo evento

un thread bloccato torna runnable quando:

• termina la “dormitina”: scade il tempo di Sleep()

• si conclude l'operazione di I/O richiesta

• il thread, che deteneva il lock sull'oggetto richiesto, lo rilascia. Oppure termina il timeout
impostato

• viene segnalato (notify()) l'evento atteso

Stopped:

quando termina il metodo codice.Attività() o in caso di eccezione non catturata

TIPI DI THREAD

C# fa distinzione tra due tipi di thread:

• Foreground thread

• Background thread

La differenza sta in questo:

• se la C# runtime, CLR, determina che il solo thread in esecuzione di un processo è un


background thread, termina il processo.

• fintanto che, invece, c'è almeno un foreground thread in esecuzione per un certo processo,
la CLR continua ad eseguire l'applicazione

BACKGROUND THREAD

Un thread background è un thread che ha il solo scopo di servire altri thread che
girano nello stesso processo.

Un esempio è un thread temporizzatore che invia segnalazioni di eventi timer ad altri


thread.

Per default un thread viene creato di tipo foreground.

Per trasformare un thread in un thread background si pone la proprietà IsBackground

alessandra peroni Pag. 2 di 3


PROPRIETA'DIAGRAMMA DEGLI STATI 15.2.2 C# Thread

a true. Così:

th.IsBackGround = true; //th è un background thread

e, solo dopo, chiamare il metodo start():

th.start(); //esegui il daemon

Il metodo run() di un thread background consiste, tipicamente, in un ciclo infinito,


durante il quale il thread aspetta richieste di servizio da parte degli altri thread.

Il thread background viene terminato dal sistema di runtime quando tutti gli altri
thread foreground del processo sono terminati: non essendoci più nessuno da servire,
il thread background non serve più.

PRIORITA'

L'algoritmo di scheduling seguito dai sistemi operativi Windows e Linux è, come


sappiamo, un Round-Robin con code a priorità.

In C# è possibile cambiare la priorità di un thread così da modificare la frequenza di


scheduling del thread stesso.

Per fare questo, si modifica la proprietà Priority della classe Thread.

I valori possibili vanno sono Lowest, BelowNormal, Normal, AboveNormal, Highest.

Thread t = new Thread(new ThreadStart(codice.Attività));


t.Priority = ThreadPriority.Highest;

Attenzione però: thread a bassa priorità potrebbero non essere mai eseguiti
(starvation).

alessandra peroni Pag. 3 di 3

Potrebbero piacerti anche