2010-10-15 70 views
11

Tôi không thể hiểu được những điều sau đây từ mô tả semaphore trong javadocs.Semaphore và đồng bộ hóa

Lưu ý rằng không có khóa đồng bộ hóa là tiến hành khi Acquire() được gọi là rằng sẽ ngăn chặn một mục từ là trở lại hồ bơi. Các semaphore đóng gói việc đồng bộ hóa cần thiết để hạn chế quyền truy cập vào hồ bơi, riêng biệt với bất kỳ đồng bộ hóa cần thiết để duy trì tính nhất quán của chính hồ bơi.

Ai đó có thể vui lòng giúp tôi hiểu điều này và ý nghĩa của nó.

Trả lời

11

Một hoạt động semaphore đóng vai trò như một giới hạn của độ sâu hồ bơi tài nguyên sẵn có; ví dụ, một semaphore với dung lượng 10 cho phép tối đa 10 chủ đề để có được nó cùng một lúc, và bất kỳ chủ đề tiếp tục cố gắng để có được nó sẽ chặn cho đến khi một trong các chủ đề khác phát hành nó.

Điều này hơi khác so với loại trừ lẫn nhau thông thường hoặc khóa màn hình, thường được sử dụng để ngăn nhiều hơn một chuỗi đồng thời sửa đổi cùng một biến và gây ra kết quả không phù hợp hoặc trạng thái chương trình.

Hãy xem xét, ví dụ: một hồ bơi kết nối có giới hạn 10 kết nối trong đó. Mỗi thread cần kết nối sẽ nhận được semaphore trong suốt thời gian sử dụng kết nối (ngăn cản quá nhiều luồng yêu cầu kết nối cùng một lúc), nhưng đối tượng pool cũng phải sử dụng các khối hoặc phương thức đã đồng bộ khi lấy các kết nối bên trong thu thập hoặc đưa họ trở lại, để ngăn chặn những thứ như mất theo dõi các kết nối hoặc nhầm lẫn đưa cùng một kết nối đến hai chủ đề khác nhau vì họ hỏi đồng thời.

+3

Một lời giải thích tốt, thực sự. +1 –

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