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?
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
@driis: Đồng ý, đã thêm ghi chú vào câu trả lời. Cảm ơn. –
+1 cho "Có bạn có thể ...", -1 cho đề nghị khóa trên 'typeof (lớp)', do đó tổng hợp 0. – LukeH