Implementuję klasę, która będzie używana jednocześnie z wielu wątków. Większość właściwości pobiera i ustawia typy pierwotne, które mogą być obsługiwane poprawnie przez klasę Interlocked. Klasa zawiera właściwość Guid. To nie jest tak proste do wdrożenia w sposób bezpieczny dla wątków. Czy w ten sposób chcesz wdrożyć nieruchomość? Z góry dziękuję.Czy jest to właściwy sposób implementacji wątku bezpiecznego odczytu/zapisu Guid?
private Byte[] _activityId;
public Guid ActivityId
{
get { return new Guid(this._activityId); }
set
{
Byte[] bytes = value.ToByteArray();
Interlocked.Exchange(ref this._activityId, bytes);
}
}
UPDATE: Tak tylko proponowane rozwiązanie do tej pory nie obejmuje korzystania z wszelkich „Threading” klas lub konstrukcji. Tak więc postawię pytanie, które już zadałem w komentarzach:
Rozumiem, że przypisania typów referencyjnych/prymitywnych mają charakter atomowy, jednak Interlocked gwarantuje, że zmiana jest propagowana do wszystkich wątków. Jeśli moglibyśmy po prostu przypisać wartość, dlaczego Interlocked udostępnia interfejsy API do wymiany typów referencyjnych i wartości pierwotnych?
Przydziały typów referencyjnych są atomowe; nie potrzebujesz "Interlocked". – SLaks
Jest bardzo możliwe, że czegoś tu brakuje, ale ponieważ Guids są typami wartości, jaki jest dokładnie ten problem? –
Jaki jest sens posiadania właściwości 'byte []' i publicznej właściwości 'Guid'? Jak ten kod będzie używany? –