2009-05-23 34 views
11

Sự khác nhau giữa số monitor và số lock là gì?Sự khác biệt giữa màn hình và khóa?

Nếu khóa chỉ đơn giản là triển khai loại trừ lẫn nhau, thì màn hình đơn giản là cách sử dụng thời gian chờ giữa các lần thực thi phương pháp?

Một lời giải thích tốt sẽ thực sự hữu ích nhờ ....

liên quan

Trả lời

13

Ví dụ trong C# .NET một tuyên bố khóa tương đương với:

Monitor.Enter(object); 
try 
{ 
    // Your code here... 
} 
finally 
{ 
    Monitor.Exit(object); 
} 

Tuy nhiên, hãy nhớ rằng Monitor cũng có thể Wait()Pulse(), thường hữu ích trong các tình huống xử lý đa luồng phức tạp.

Edit: Trong các phiên bản sau này của .NET framework, điều này đã được đổi thành:

bool lockTaken = false; 
try 
{ 
    Monitor.Enter(object, ref lockTaken); 
    // Your code here... 
} 
finally 
{ 
    if (lockTaken) 
    { 
     Monitor.Exit(object); 
    } 
} 
+0

@John Gietzen: tuyệt vời ...thx cho lời giải thích tuyệt vời. – IAbstract

4

Họ đang liên quan. Ví dụ: trong C#, câu lệnh lock là trình bao bọc đơn giản cuối cùng thử nghiệm xung quanh entering a Monitorexiting one khi hoàn tất.

1

Màn hình là trình biên dịch hỗ trợ "bán tự động" ổ khóa. Chúng cho phép người ta khai báo các phương thức synchronized trên các lớp, vv Đây chỉ là một cách tiếp cận khác nhau để cung cấp loại trừ lẫn nhau. Tôi tìm thấy this book là giải thích toàn diện nhất về các khái niệm, mặc dù nó chủ yếu hướng đến các nhà phát triển hệ điều hành.

0

Khóa đảm bảo loại trừ lẫn nhau.

Màn hình kết hợp dữ liệu được bảo vệ và loại trừ lẫn nhau và đồng bộ hóa nguyên thủy bắt buộc để bảo vệ quyền truy cập vào dữ liệu.
Đồng bộ hóa được sử dụng, ví dụ: khi bạn cần một chuỗi để chờ cho đến khi sự kiện xảy ra (ví dụ: đợi cho đến khi một chuỗi khác đặt một mục trong hàng đợi).

0

Màn hình là cấu trúc ngôn ngữ lập trình thực hiện tương tự như semiphores/locks, nhưng Màn hình kiểm soát dữ liệu được chia sẻ bằng cách đồng bộ hóa vào thời gian chạy. Ngược lại, khóa bảo vệ dữ liệu được chia sẻ chỉ bằng cách "quay" có thể dẫn đến việc sử dụng CPU kém.

-1

Khóa tập trung vào chỉ exculsion lẫn nhau, nhưng Moniter cung cấp loại trừ lẫn nhau tự động.

Vì vậy, chúng tôi không cần phải lo lắng về việc sử dụng loại trừ lẫn nhau trong Màn hình. Thay vì ME, chúng ta cần phải quan tâm đến sycronzing chỉ khi chúng ta lập trình.

Moniter cung cấp cách lập trình hệ thống hơn. Nó, có, là tiên tiến hơn.

0

Không có sự khác biệt, khóa tạo Monitor.Enter và Monitor.Exit trong khối thử/cuối cùng. Sử dụng Monitor over lock cho phép bạn tinh chỉnh vì nó có Pulse và PulseAll. Bạn cũng có thể xử lý thay thế nếu bạn không thể lấy khóa bằng TryEnter.

-1

Màn hình là khái niệm và Khóa là triển khai thực tế.

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