MesBlog

Thinking in sharp architectures
posts - 179, comments - 436, trackbacks - 150

Incapsulare un monitor

non quello del pc ovviamente :-)
Dopo aver conosciuto di persona e scambiato alcune parole con Luca Minudel (è stato un vero piacere), e spinto anche dalle parole di Lorenzo Barbieri (uno dei pochi con cui non mi è riuscito di presentarmi, lo farò la prossima volta di sicuro), mi sono deciso a scriver di più riguardo le mie esperienze di programmazione.

OK cominciamo subito oggi con una breve informazione per chi ha a che fare con il multithreading. per promuovere il disaccoppiamento e la thread safety di componenti .net è possibile incapsulare un monitor all'interno di un metodo di una classe come segue:

public class MyClass
{
    
public void DoSomething()
    {
        
lock(this)
        {
            
/*Method code*/
        
}
    }
}

ho scoperto oggi che è possibile utilizzare una forma più elegante tramite un attributo:

public class MyClass
{
    [MethodImpl(MethodImplOptions.Synchronized)]
    
public void DoSomething()
    {
        
/*Method code*/
    
}
}

è possibile ovviamente decorare anche metodi non void, metodi statici e proprietà:

using System.Runtime.CompilerServices

public class MyClass
{
    
private int m_Num = 0;
    
    
public int Number
    {
        [MethodImpl(MethodImplOptions.Synchronized)]
        
get
        
{
            
return m_Num;
        }
        [MethodImpl(MethodImplOptions.Synchronized)]
        
set
        
{
            m_Num = 
value;
        }
    }
}

ci sarebbe molto da dire su questi che vengono chiamati metodi soncronizzati comparandoli con i domini di sincronizzazione, ma non credo di essere in grado di farlo in maniera compiuta!

saluti

MesBlog powered by IMHO

Print | posted on venerdì 3 dicembre 2004 18:35 |

Feedback

Gravatar

# re: Incapsulare un monitor

Aggiungo:
Con l'attributo: System.Runtime.Remoting.Contexts.Syncronization per rendere "sincrona" un'intera classe! :-)
P.S. E' stato un vero piacere scambiare quattro chiacchere ieri! Ele si aggrega al mio P.S.
03/12/2004 19:04 | Michele Bernardi
Gravatar

# re: Incapsulare un monitor

Luca: se la'rgomento è interessante vedrò di scriverne qualcosa in più, per quanto riguarda il suggerimento sulla verifica, bè non mi sarei mai sognato di scriverlo se non lo avessi testato, inoltre la fonte è autorevole e da me utilizzata anche per altri ambiti con successo (non so se ho scelto il metodo migliore, ma la parola "scoperto" è un link al riferimento del libro. PS: un libro che per me è di fondamentale importanza, si tratta di "Programming .NET Components" di Juval Lowy).

Michele: l'attributo di cui parli fa proprio parte del discorso dei domini di sincronizzazione (quindi della sincrnizzazione automatica che offre il fx) che sono l'altra faccia della medaglia rispetto ai metodi sincronizzati che ho descritto. a questo punto credo che dovrò almeni accennarne da qualche parte....

saluti
03/12/2004 19:20 | Roberto Messora
Gravatar

# re: Incapsulare un monitor

> uno dei pochi con cui non mi è riuscito di presentarmi, lo farò la prossima volta di sicuro

Ci conto! Ciao!!!
03/12/2004 22:48 | Lorenzo Barbieri
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET