Uwielbiam szybki sposób tworzenia klas w języku C#, gdzie możemy łatwo tworzyć członków bez konieczności implementowania kodu get i set, ale (o ile mi wiadomo) nie są bezpieczni dla wątków!Jakikolwiek sposób, aby uczynić ten wątek klasy C# bezpiecznym bez przepisywania?
public class SocksEntry
{
public int Int1 { get; set; }
public int Int2 { get; set; }
}
Czy C# zapewniają szybki łatwy sposób dodawania bezpieczeństwa wątku bez konieczności to zrobić?
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; }
}
}
To oczywiście sprawia, że cała klasa jest o wiele większa i trudniejsza do stworzenia w porównaniu z wersją bez wątków!
Może chcesz rzucić okiem na to: http://www.codeproject.com/Articles/33559/Handy-wrapper-class-for-thread-safe-property-acces –
Twój kod z wbudowanymi zamkami w obiekcie akcesory nie są tak naprawdę bezpieczne dla wątków. Jedyne, co mogą ci kupić, to bariery pamięci, jeśli metody są wbudowane, ale operacje, które "blokujesz", są w rzeczywistości już operacjami atomowymi. Miałoby sens tylko blokowanie operacji na wyższym poziomie, które wymagają koordynacji wielu stanów. –