Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Syncronization Locks: un alternativa per Visual Basic

Se vi siete cimentati nella programmazione orientata al multithreading, vi sarà sicuramente capitato di sentire parlare di synchronization locks, ossia quella fase in cui un thread blocca un oggetto su cui sta lavorando finchè non finisce il lavoro, onde evitarne l'accesso da parte di altri thread.

In Visual Basic questo obiettivo si può raggiungere utilizzando il blocco SyncLock..End SyncLock, come nell'esempio che segue:

Class Prova

 

    Sub Salva()

        SyncLock Me

            My.Computer.FileSystem.WriteAllText("C:\MioFile.txt", "Testo di prova", False)

        End SyncLock

    End Sub

End Class

L'utilizzo della scrittura di un file di testo come esempio è, ovviamente, volutamente banale per meglio capire i concetti di contorno. Nel codice, il blocco viene stabilito nei confronti di tutta la classe (se per scrivere il file di testo avessimo usato un oggetto stream, avremmo potuto imporre il blocco sullo stream). In C# è disponibile l'analogo blocco chiamato lock. In realtà, queste keywords vanno a sfruttare la classe Monitor del namespace System.Threading, che può essere utilizzata in questo modo:

Class Prova

 

    Sub Salva()

        Monitor.Enter(Me)

        Try

            My.Computer.FileSystem.WriteAllText("C:\MioFile.txt", "Testo di prova", False)

        Catch ex As Exception

        Finally

            Monitor.Exit(Me)

        End Try

    End Sub 

End Class

L'effetto prodotto è il medesimo del blocco SyncLock..End SyncLock, con la differenza che la classe Monitor implementa alcuni metodi particolari, come ad esempio TryEnter che, dato un timeout in millisecondi, tenta di imporre il blocco sull'oggetto per garantire l'accesso esclusivo, ripetendo il tentativo per i millisecondi specificati. Se poi vi piace scrivere codice aderente alle Common Language Specifications, l'utilizzo di una classe di .NET Framework è preferibile a blocchi sintattici tipici dei linguaggi, sebbene il risultato prodotto sia il medesimo a livello di codice intermedio.

Alessandro

Print | posted on domenica 6 gennaio 2008 18:13 | Filed Under [ .NET Framework ]

Powered by:
Powered By Subtext Powered By ASP.NET