Mi piace il modo rapido di creare classi in C# in cui possiamo facilmente creare membri senza dover implementare il codice get e set ma (per quanto ne so) non sono thread-safe!Un modo per rendere sicuro questo thread di classe C# senza riscrivere?
public class SocksEntry
{
public int Int1 { get; set; }
public int Int2 { get; set; }
}
C# fornisce un modo rapido e semplice per aggiungere sicurezza di thread senza doverlo fare?
public class SocksEntry
{
protected object _lock = new object();
// internal
private int _int1 = 0;
private int _int2 = 0;
// accessors
protected int Int1
{
get { lock (_lock) return _int1; }
set { lock (_lock) _int1 = value; }
}
protected int Int2
{
get { lock (_lock) return _int2; }
set { lock (_lock) _int2 = value; }
}
}
Ovviamente rende l'intera classe molto più grande e un dolore da creare rispetto alla versione non thread-safe!
Potrebbe voler dare un'occhiata a questo: http://www.codeproject.com/Articles/33559/Handy-wrapper-class-for-thread-safe-property-acces –
Il tuo codice con blocchi incorporati nella proprietà anche gli accessor non sono veramente sicuri per i thread. L'unica cosa che potrebbero comprarti sono le barriere della memoria se i metodi sono in linea, ma le operazioni su cui stai "bloccando" sono in realtà già operazioni atomiche. Avrebbe senso solo bloccare le operazioni di livello superiore che comportano il coordinamento di più stati. –