Tôi có tình huống sau: Tôi muốn chung loại trừ quyền truy cập vào một đối tượng.Có thể khóa và giám sát được sử dụng trên cùng một đối tượng an toàn không?
Cho đến nay tôi normaly sẽ sử dụng một đối tượng khóa
object lockObject = new object();
...
method1: lock(lockObject) { CODE1 }
Bây giờ tôi cũng có một phương pháp có thể được gọi từ thread khác. Nó không nên bị chặn trong thời gian không xác định, thay vào đó nó sẽ đưa ra một câu trả lời trong một thời gian xác định.
Trong trường hợp này tôi sẽ sử dụng một màn hình, giống như
method2:
try{
Monitor.TryEnter(lockObject , 20000, ref lockTaken);
if (lockTaken) {CODE2}
}
catch(...){...}
finally
{
if (lockTaken) Monitor.Exit(timerLock);
}
Bây giờ câu hỏi của tôi là: có thể khóa và màn hình được trộn lẫn theo cách như vậy nếu lockobject là như nhau và cùng loại trừ lẫn nhau, hoặc sẽ nó là cần thiết để thay đổi mọi khóa cho một màn hình.
Vì vậy, cả hai lần cùng một mã thông báo sẽ bị "khóa" hoặc màn hình sẽ tạo một mã thông báo khác cho đối tượng thì khóa?
Nhìn thoáng qua, tôi không thể thấy rằng ứng dụng chạy trong mã của cả hai cùng một lúc. Nhưng tôi không biết nếu bất kỳ vấn đề thời gian có thể tồn tại, nơi CODE1 và CODE2 được thực thi song song.
Tôi cảm thấy đau đớn của bạn; Tôi thường muốn từ khóa 'lock' mất một thời gian chờ bằng cách nào đó bằng cách nào đó –