2010-04-01 27 views
9

Tôi có một lớp quản lý tài nguyên được chia sẻ. Bây giờ, kể từ khi truy cập vào tài nguyên phụ thuộc vào nhiều tham số, lớp này được khởi tạo và xử lý nhiều lần trong quá trình thực hiện bình thường của chương trình.Có an toàn khi khóa một biến tĩnh trong một lớp không tĩnh?

Tài nguyên được chia sẻ không hỗ trợ đồng thời, do đó cần có loại khóa nào đó. Việc đầu tiên mà đi vào tâm trí của tôi là có một trường hợp tĩnh trong lớp, và có được ổ khóa vào nó, như thế này:

// This thing is static! 
static readonly object MyLock = new object(); 

// This thing is NOT static! 
MyResource _resource = ...; 

public DoSomeWork() { 
    lock(MyLock) { 
     _resource.Access(); 
    } 
} 

Việc đó có ý nghĩa, hoặc bạn sẽ sử dụng phương pháp khác?

Trả lời

6

Có, bạn có thể sử dụng biến tĩnh để bảo vệ tài nguyên được chia sẻ.

Bạn cũng có thể sử dụng typeof(class) as the expression inside lock. Tuy nhiên, hãy xem cảnh báo bên dưới, với biến tĩnh, nó được bảo vệ ít nhất trong lớp của bạn.

+5

Tôi sẽ không khóa trên typeof (lớp học), vì bạn có thể bị bế tắc nếu người khác khóa cùng loại. Ít nhất, không làm điều đó trên các loại công cộng. – driis

+1

@driis: Đồng ý, đã thêm ghi chú vào câu trả lời. Cảm ơn. –

+2

+1 cho "Có bạn có thể ...", -1 cho đề nghị khóa trên 'typeof (lớp)', do đó tổng hợp 0. – LukeH

Các vấn đề liên quan