Tôi thích cách tạo nhanh các lớp trong C# nơi chúng ta có thể dễ dàng tạo các Thành viên mà không phải triển khai mã nhận và đặt nhưng (theo như tôi biết) chúng không phải là chủ đề an toàn!Bất kỳ cách nào để làm cho chuỗi C# lớp này an toàn mà không cần viết lại?
public class SocksEntry
{
public int Int1 { get; set; }
public int Int2 { get; set; }
}
C# có cung cấp cách nhanh chóng để thêm an toàn luồng mà không phải thực hiện việc này không?
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; }
}
}
Nó rõ ràng làm cho toàn bộ lớp lớn hơn rất nhiều và một nỗi đau để tạo ra so với phiên bản an toàn không đề!
Có thể muốn xem nội dung này: http://www.codeproject.com/Articles/33559/Handy-wrapper-class-for-thread-safe-property-acces –
Mã của bạn với ổ khóa được nhúng trong thuộc tính accessors cũng không thực sự an toàn cho thread. Điều duy nhất họ có thể mua cho bạn là rào cản bộ nhớ nếu các phương pháp được gạch chân, nhưng các hoạt động bạn đang 'khóa' xung quanh thực sự là các hoạt động nguyên tử. Nó sẽ chỉ có ý nghĩa để khóa trên các hoạt động cấp cao hơn liên quan đến sự phối hợp của nhiều tiểu bang. –