Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
La gestione dei processi in .NET: le operazioni sincrone
Scritto da Rocco Galati il 17-11-2010 ore 11:01
Intel Cluster Studio XE
I concetti di operazione sincrona e asincrona sono piuttosto complesso da capire e a volte succede che i programmatori facciano confusione, interpretando male le definizioni e, quindi, gestendo in modo errato i processi della propria applicazione. Questo è dovuto anche al fatto che in molti libri di testo le descrizioni sul funzionamento delle operazioni non sono dettagliate ed esatte, e risulta difficile coglierne le sottili sfumature.

Ad esempio, non è corretto affermare che in un contesto sincrono, due o più operazioni che esistono all'interno dello stesso thread si debbano bloccare a vicenda, così come non è giusto affermare che in un contesto asincrono, due o più operazioni possono tranquillamente essere trattate in modo concorrente, nello stesso lasso di tempo, se presenti in thread diversi, senza che l'una ostacoli o blocchi l'altra.

In realtà, quando si lavora in modalità sincrona, si può avere un set di operazioni che accedono a una risorsa, la quale a sua volta può gestire più operazioni contemporaneamente; in questo scenario, le operazioni possono essere eseguite in modo sequenziale, una alla volta, quindi nello stesso thread, oppure raggruppate in insiemi a seconda del numero di operazioni che è in grado di accogliere una risorsa.

In quest'ultimo caso, le operazioni vengono eseguite simultaneamente, quando appartenenti al gruppo che ottiene il permesso di accedere alla risorsa in questione. In una situazione del genere, è sbagliato dire che le operazioni possono bloccarsi a vicenda perché appartengono allo stesso thread, in quanto lo stadio di stallo è determinato unicamente dal fatto che vi è una contesa per l'accesso a una risorsa. La soluzione a questa eventualità è rappresentata dall'adozione di un codice di sincronismo, che arbitri le contese tra i processi in gioco.

Un algoritmo di sincronizzazione serve a progettare un sistema capace di evitare la contesa delle risorse assicurandosi che ad accedervi sia un thread alla volta, costringendo gli altri a uno stato di attesa sino al rilascio delle risorse impegnate. La sincronia dei processi, quindi, non deve essere intesa come una soluzione che permette di avere più processi attivi allo stesso tempo, ma come un metodo per arbitrarli.
Precedente: Realizzare una chat con un'implementazione Comet per GWT (4/5)
Successiva: C++0x: nuovi algoritmi STL per la produttività
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.288 secondi.