Những gì tôi biết là, writelock giống như được đồng bộ hóa.ReentrantReadWriteLock, sự khác nhau giữa ReadLock và WriteLock
Readlock và writelock ảnh hưởng lẫn nhau bằng cách nào đó.
ReadLock dường như không thể hoạt động độc lập.
Những gì tôi biết là, writelock giống như được đồng bộ hóa.ReentrantReadWriteLock, sự khác nhau giữa ReadLock và WriteLock
Readlock và writelock ảnh hưởng lẫn nhau bằng cách nào đó.
ReadLock dường như không thể hoạt động độc lập.
readLock.lock();
Điều này có nghĩa rằng nếu bất kỳ thread khác là viết (ví dụ: tổ chức một khóa viết) sau đó dừng lại ở đây cho đến khi không có thread khác đang viết.
Khi khóa được cấp không có chủ đề nào khác sẽ được phép viết (ví dụ: ghi khóa) cho đến khi khóa được nhả ra.
writeLock.lock();
Điều này có nghĩa rằng nếu bất kỳ thread khác là đọc hoặc viết, dừng lại ở đây và đợi cho đến khi không có thread khác đang đọc hoặc bằng văn bản.
Khi khóa được chấp thuận, không có chủ đề khác sẽ được phép đọc hoặc ghi (ví dụ: hãy đọc hoặc viết khóa) cho đến khi khóa được phát hành.
Kết hợp các bạn chỉ có thể sắp xếp mỗi lần một luồng để có quyền ghi nhưng nhiều người đọc như bạn có thể đọc cùng một lúc ngoại trừ khi chỉ chuỗi được viết.
Đặt một cách khác. Mỗi lần bạn muốn đọc từ cấu trúc, hãy đọc đọc khóa. Mỗi lần bạn muốn viết, hãy viết khóa. Bằng cách này bất cứ khi nào việc viết xảy ra thì không ai đọc (bạn có thể tưởng tượng bạn có quyền truy cập độc quyền), nhưng có thể có nhiều độc giả đọc cùng một lúc miễn là không có ai đang viết.
Các tài liệu cho ReadWriteLock
làm rõ điều này:
Một ReadWriteLock duy trì một cặp khóa có liên quan, một cho read-only hoạt động và một cho văn bản. Khóa đọc có thể được giữ đồng thời bởi nhiều luồng đọc, miễn là không có người viết. Khóa ghi là độc quyền.
Vì vậy, bạn có thể có nhiều độc giả cùng một lúc, nhưng chỉ có một người viết - và người viết cũng sẽ ngăn người đọc đọc. Điều này hữu ích nếu bạn có một số tài nguyên an toàn để đọc từ nhiều luồng và khi đọc phổ biến hơn nhiều so với viết, nhưng khi tài nguyên không phải là thực sự là chỉ đọc. (Nếu không có nhà văn và đọc là an toàn, không có nhu cầu cho một khóa ở tất cả.)
Khi một thread có được một WriteLock
, không có chủ đề khác có thể có được ReadLock
lẫn WriteLock
của cùng một ví dụ của ReentrantReadWriteLock
, trừ khi thread đó giải phóng khóa. Tuy nhiên, nhiều chủ đề có thể có được ReadLock
cùng một lúc.
+1 giải thích tốt. Chỉ cần làm rõ, bởi 'một' bạn có nghĩa là' thread'. –