Tôi đã thực hiện đa luồng đơn giản trong VB.NET trong một thời gian và vừa mới nhận được dự án đa luồng lớn đầu tiên của mình. Tôi đã luôn luôn làm tất cả mọi thứ bằng cách sử dụng tuyên bố Synclock
bởi vì tôi không nghĩ rằng có một cách tốt hơn.Tại sao nên sử dụng SyncLocks trong .NET cho các hoạt động đơn giản khi lớp có khóa liên kết có sẵn?
Tôi chỉ biết về Interlocked
Class - nó làm cho nó trông như thể tất cả điều này:
Private SomeInt as Integer
Private SomeInt_LockObject as New Object
Public Sub IntrementSomeInt
Synclock SomeInt_LockObject
SomeInt += 1
End Synclock
End Sub
có thể được thay thế bằng một tuyên bố duy nhất:
Interlocked.Increment(SomeInt)
này xử lý tất cả các khóa trong nội bộ và sửa đổi số. Điều này sẽ đơn giản hơn nhiều so với việc viết khóa của riêng tôi cho các thao tác đơn giản (các hoạt động dài hơn hoặc phức tạp hơn rõ ràng vẫn cần khóa riêng của chúng).
Có lý do tại sao tôi sẽ tự khóa khóa của mình, sử dụng các đối tượng khóa chuyên dụng, khi tôi có thể thực hiện điều tương tự bằng cách sử dụng các phương thức Interlocked
?
Bạn có thể cung cấp ví dụ về tình huống như vậy không? Nếu tôi chỉ làm một đơn giản tăng/giảm (hoặc. Thêm nếu tôi cần phải thay đổi giá trị nhiều hơn 1), nó có vẻ như Interlocked sẽ là tốt hơn trong mọi trường hợp. Nếu tôi cần một cái gì đó cao cấp hơn (như một quá trình 4 bước mà tôi cần phải đảm bảo đó là chủ đề duy nhất chạy nó tại bất kỳ thời điểm nào), tôi cần một số Đồng bộ hóa. Tôi quan tâm đến một tình huống mà Interlocked sẽ xuất hiện là thích hợp, nhưng là một lựa chọn tồi. – SqlRyan
Nếu bạn đang làm việc với hai biến khác nhau, 'Interlocked' là không đủ. – SLaks