Mi chiedo solo se questo codice che un altro sviluppatore (che da allora ha lasciato) sia OK, penso che volesse evitare di mettere un lucchetto. C'è una differenza di prestazioni tra questo e solo usando un blocco diretto?Interlockato usato per incrementare/imitare un booleano, è sicuro?
private long m_LayoutSuspended = 0;
public void SuspendLayout()
{
Interlocked.Exchange(ref m_LayoutSuspended, 1);
}
public void ResumeLayout()
{
Interlocked.Exchange(ref m_LayoutSuspended, 0);
}
public bool IsLayoutSuspended
{
get { return Interlocked.Read(ref m_LayoutSuspended) != 1; }
}
Stavo pensando che qualcosa del genere sarebbe stato più semplice con un lucchetto? Sarà infatti utilizzato da più thread, quindi perché è stato deciso l'uso di bloccaggio/interblocco.
@Jon: Sono curioso, puoi approfondire "volatile non significa esattamente come pensavo"? – LukeH
@Luke: ho intenzione di approfondire in dettaglio in un post del blog, ma http://www.bluebytesoftware.com/blog/2008/06/13/VolatileReadsAndWritesAndTimeliness.aspx è quasi tutto. –
Giusto per enfatizzare, un tempo volatile ** non ** è sicuro (su un sistema a 32 bit). –